- محدودیت زمان: ۲ ثانیه
- محدودیت حافظه: ۲۵۶ مگابایت
امین و دوستانش چند سال است که مسابقات برنامهنویسی مختلفی بهصورت خصوصی برگزار میکنند. آنها در مسابقات خود، امتیازات شرکتکنندگان را روی کاغذ محاسبه میکنند و جدول امتیازات را نیز بهصورت دستی رسم میکنند! امین که بهتازگی با مسابقات کوئرا آشنا شده است، دریافته که جدول امتیازات مسابقات در کوئرا مشابه جدول امتیازاتی است که بهصورت دستی رسم میکنند. او از شما میخواهد برنامهای بنویسید که محاسبات مربوط به جدول امتیازات مسابقات را انجام دهد.
در کوئرا، هر فردی که حداقل یک کد در یک مسابقه ارسال کند، نامش در جدول امتیازات آن مسابقه نمایش داده میشود. هر کدی که ارسال میشود، یک زمان ارسال دارد که بهصورت نسبی از زمان شروع مسابقه محسوب میشود. هر فرد به ازای هر سؤال در مسابقه، حداکثر یک ارسال نهایی دارد که از بین کدهای ارسالشدهی فرد برای آن سؤال انتخاب میشود. بهصورت پیشفرض، کدی که بیشترین امتیاز را زودتر از سایر ارسالها دریافت کرده است بهعنوان ارسال نهایی در نظر گرفته میشود. البته شرکتکننده میتواند یک کد دلخواه را بهعنوان ارسال نهایی در نظر بگیرد.
نحوهی رتبهبندی شرکتکنندگان در جدول امتیازات بهصورت زیر است:
- فردی که مجموع امتیازات ارسالهای نهاییاش بیشتر باشد، در رتبهی بالاتری قرار میگیرد.
- اگر مجموع امتیازات ارسالهای نهایی دو نفر یکسان باشد، فردی که مجموع زمانهای ارسالهای نهایی غیر صفرش (ارسالهای نهاییای که امتیازشان صفر نیست) کمتر باشد در رتبهی بالاتری قرار میگیرد.
- اگر مجموع امتیازات و مجموع زمانهای ارسالهای نهایی غیر صفر دو نفر یکسان باشد، فردی که شناسهی عددی کاربریاش کوچکتر باشد در رتبهی بالاتری قرار میگیرد.
عدد رتبهی افراد برخلاف جایگاه در جدول امتیازات، صرفاً براساس مجموع امتیازات ارسالهای نهایی مشخص میشود. برای مثال، اگر پنج نفر امتیاز ۱۰۰۰ را کسب کرده باشند و یک نفر امتیاز ۹۰۰، عدد رتبهی پنج نفر اول برابر با ۱ و عدد رتبهی نفر ششم برابر با ۶ خواهد بود.
طبق توضیحات فوق، دستورات زیر باید در برنامه پیادهسازی شوند:
افزودن سؤال به مسابقه
add_problem contest_id problem_id
این دستور، سؤالی با شناسهی problem_id
را به مسابقهای با شناسهی contest_id
اضافه میکند. در صورتی که این سؤال از قبل در مسابقهی دیگری وجود داشت، سؤال نباید به مسابقه اضافه شود.
ثبت اطلاعات کد ارسالی برای سؤال
add_submission submission_id user_id problem_id time score
این دستور، یک کد ارسالی جدید با شناسهی submission_id
را برای سؤالی با شناسهی problem_id
که توسط کاربری با شناسهی user_id
در time
ثانیه پس از شروع مسابقه ارسال شده و امتیاز score
را کسب کرده است اضافه میکند. تضمین میشود که کد ارسالیای با شناسهی submission_id
از قبل وجود ندارد. اگر سؤالی با شناسهی problem_id
از قبل به مسابقهای اضافه نشده بود، نباید هیچ اتفاقی بیفتد.
توجه: اطلاعات کدهای ارسالی لزوماً بهترتیب صعودی برحسب زمان ارسال اضافه نمیشوند.
تغییر ارسال نهایی
change_final_submission user_id problem_id submission_id
این دستور، ارسال نهایی سؤالی با شناسهی problem_id
برای کاربری با شناسهی user_id
را به کد ارسالیای با شناسهی submission_id
تغییر میدهد. اگر حداقل یکی از شرایط زیر برقرار بود، هیچ افتقای نباید بیفتد:
- کد ارسالیای با شناسهی
submission_id
موجود نباشد - کد ارسالی توسط کاربری با شناسهی
user_id
ارسال نشده باشد - کد ارسالی متعلق به سؤالی با شناسهی
problem_id
نباشد
نمایش جدول امتیازات
get_scoreboard contest_id
این دستور، جدول امتیازات مسابقهای با شناسهی contest_id
را نمایش میدهد. افراد باید بهترتیب نزولی جایگاه نمایش داده شوند. به ازای هر نفر، یک خط بهصورت زیر باید چاپ شود:
place_no user_id score_sum time_sum
در خط فوق:
place_no
عدد رتبهی شرکتکننده است.user_id
شناسهی فرد است.score_sum
مجموع امتیاز ارسالهای نهایی فرد است.time_sum
مجموع زمان ارسالهای نهایی غیر صفر فرد است. اگر فرد ارسال نهایی غیر صفر نداشته باشد، این عدد نباید چاپ شود.
توجه: اگر مسابقهای با شناسهی contest_id
موجود نباشد یا هیچ ارسالی برای سؤالات مسابقه صورت نگرفته باشد، نباید چیزی چاپ شود.
خروج از برنامه
end
با اجرای این دستور، اجرای برنامه خاتمه مییابد.
ورودی
ورودی شامل چندین خط است که در هر خط یکی از دستوراتی که گفته شد، وارد میشود.
همچنین در خط آخر ورودی، دستور end
وارد میشود.
تعداد دستورات ورودی حداکثر ۵۰۰ تا است.
خروجی
پس از اجرای دستورات، خروجی دستورات get_scoreboard
را چاپ کنید.
مثال
add_problem 1324 12
add_submission 651621 32 12 301 100
get_scoreboard 1324
end
خروجی نمونه ۱
1 32 100 301
ورودی نمونه ۲
add_problem 4984 984621
add_submission 6519 3265 984621 658 100
add_submission 98321 78135 984621 1000 100
get_scoreboard 4984
end
خروجی نمونه ۲
1 3265 100 658
1 78135 100 1000
ورودی نمونه ۳
add_problem 1 1
add_problem 1 2
add_problem 1 3
add_problem 1 3
add_problem 3 3
add_submission 1 4 1 1500 100
add_submission 2 4 1 658 100
add_submission 3 2 1 1000 100
add_submission 4 2 1 1001 100
add_submission 5 2 3 123 66
change_final_submission 2 1 4
add_submission 6 3 1 1500 100
add_submission 7 3 1 658 100
add_submission 8 10 1 900 0
get_scoreboard 1
end
خروجی نمونه ۳
1 2 166 1124
2 3 100 658
2 4 100 658
4 10 0
ارسال پاسخ برای این سؤال