لینک‌های مفید برای شرکت در مسابقه:

در حین مسابقه، می‌توانید سؤالات خود را از بخش «سؤال بپرسید» مطرح کنید.

جدول امتیازات


  • محدودیت زمان: ۲ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

امین و دوستانش چند سال است که مسابقات برنامه‌نویسی مختلفی به‌صورت خصوصی برگزار می‌کنند. آن‌ها در مسابقات خود، امتیازات شرکت‌کنندگان را روی کاغذ محاسبه می‌کنند و جدول امتیازات را نیز به‌صورت دستی رسم می‌کنند! امین که به‌تازگی با مسابقات کوئرا آشنا شده است، دریافته که جدول امتیازات مسابقات در کوئرا مشابه جدول امتیازاتی است که به‌صورت دستی رسم می‌کنند. او از شما می‌خواهد برنامه‌ای بنویسید که محاسبات مربوط به جدول امتیازات مسابقات را انجام دهد.

در کوئرا، هر فردی که حداقل یک کد در یک مسابقه ارسال کند، نامش در جدول امتیازات آن مسابقه نمایش داده می‌شود. هر کدی که ارسال می‌شود، یک زمان ارسال دارد که به‌صورت نسبی از زمان شروع مسابقه محسوب می‌شود. هر فرد به ازای هر سؤال در مسابقه، حداکثر یک ارسال نهایی دارد که از بین کدهای ارسال‌شده‌ی فرد برای آن سؤال انتخاب می‌شود. به‌صورت پیش‌فرض، کدی که بیشترین امتیاز را زودتر از سایر ارسال‌ها دریافت کرده است به‌عنوان ارسال نهایی در نظر گرفته می‌شود. البته شرکت‌کننده می‌تواند یک کد دلخواه را به‌عنوان ارسال نهایی در نظر بگیرد.

نحوه‌ی رتبه‌بندی شرکت‌کنندگان در جدول امتیازات به‌صورت زیر است:

  • فردی که مجموع امتیازات ارسال‌های نهایی‌اش بیشتر باشد، در رتبه‌ی بالاتری قرار می‌گیرد.
  • اگر مجموع امتیازات ارسال‌های نهایی دو نفر یکسان باشد، فردی که مجموع زمان‌های ارسال‌های نهایی غیر صفرش (ارسال‌های نهایی‌ای که امتیازشان صفر نیست) کمتر باشد در رتبه‌ی بالاتری قرار می‌گیرد.
  • اگر مجموع امتیازات و مجموع زمان‌های ارسال‌های نهایی غیر صفر دو نفر یکسان باشد، فردی که شناسه‌ی عددی کاربری‌اش کوچک‌تر باشد در رتبه‌ی بالاتری قرار می‌گیرد.

عدد رتبه‌ی افراد برخلاف جایگاه در جدول امتیازات، صرفاً براساس مجموع امتیازات ارسال‌های نهایی مشخص می‌شود. برای مثال، اگر پنج نفر امتیاز ۱۰۰۰ را کسب کرده باشند و یک نفر امتیاز ۹۰۰، عدد رتبه‌ی پنج نفر اول برابر با ۱ و عدد رتبه‌ی نفر ششم برابر با ۶ خواهد بود.

طبق توضیحات فوق، دستورات زیر باید در برنامه پیاده‌سازی شوند:

افزودن سؤال به مسابقه🔗

add_problem contest_id problem_id
Plain text

این دستور، سؤالی با شناسه‌ی problem_id را به مسابقه‌ای با شناسه‌ی contest_id اضافه می‌کند. در صورتی که این سؤال از قبل در مسابقه‌ی دیگری وجود داشت، سؤال نباید به مسابقه اضافه شود.

ثبت اطلاعات کد ارسالی برای سؤال🔗

add_submission submission_id user_id problem_id time score
Plain text

این دستور، یک کد ارسالی جدید با شناسه‌ی submission_id را برای سؤالی با شناسه‌ی problem_id که توسط کاربری با شناسه‌ی user_id در time ثانیه پس از شروع مسابقه ارسال شده و امتیاز score را کسب کرده است اضافه می‌کند. تضمین می‌شود که کد ارسالی‌ای با شناسه‌ی submission_id از قبل وجود ندارد. اگر سؤالی با شناسه‌ی problem_id از قبل به مسابقه‌ای اضافه نشده بود، نباید هیچ اتفاقی بیفتد.

توجه: اطلاعات کدهای ارسالی لزوماً به‌ترتیب صعودی برحسب زمان ارسال اضافه نمی‌شوند.

تغییر ارسال نهایی🔗

change_final_submission user_id problem_id submission_id
Plain text

این دستور، ارسال نهایی سؤالی با شناسه‌ی problem_id برای کاربری با شناسه‌ی user_id را به کد ارسالی‌ای با شناسه‌ی submission_id تغییر می‌دهد. اگر حداقل یکی از شرایط زیر برقرار بود، هیچ افتقای نباید بیفتد:

  • کد ارسالی‌ای با شناسه‌ی submission_id موجود نباشد
  • کد ارسالی توسط کاربری با شناسه‌ی user_id ارسال نشده باشد
  • کد ارسالی متعلق به سؤالی با شناسه‌ی problem_id نباشد

نمایش جدول امتیازات🔗

get_scoreboard contest_id
Plain text

این دستور، جدول امتیازات مسابقه‌ای با شناسه‌ی contest_id را نمایش می‌دهد. افراد باید به‌ترتیب نزولی جایگاه نمایش داده شوند. به ازای هر نفر، یک خط به‌صورت زیر باید چاپ شود:

place_no user_id score_sum time_sum
Plain text

در خط فوق:

  • place_no عدد رتبه‌ی شرکت‌کننده است.
  • user_id شناسه‌ی فرد است.
  • score_sum مجموع امتیاز ارسال‌های نهایی فرد است.
  • time_sum مجموع زمان ارسال‌های نهایی غیر صفر فرد است. اگر فرد ارسال نهایی غیر صفر نداشته باشد، این عدد نباید چاپ شود.

توجه: اگر مسابقه‌ای با شناسه‌ی contest_id موجود نباشد یا هیچ ارسالی برای سؤالات مسابقه صورت نگرفته باشد، نباید چیزی چاپ شود.

خروج از برنامه🔗

end
Plain text

با اجرای این دستور، اجرای برنامه خاتمه می‌یابد.

ورودی🔗

ورودی شامل چندین خط است که در هر خط یکی از دستوراتی که گفته شد، وارد می‌شود.

همچنین در خط آخر ورودی، دستور end وارد می‌شود.

تعداد دستورات ورودی حداکثر ۵۰۰ تا است.

خروجی🔗

پس از اجرای دستورات، خروجی دستورات get_scoreboard را چاپ کنید.

مثال🔗

ورودی نمونه ۱🔗

add_problem 1324 12
add_submission 651621 32 12 301 100
get_scoreboard 1324
end
Plain text

خروجی نمونه ۱🔗

1 32 100 301
Plain text

ورودی نمونه ۲🔗

add_problem 4984 984621
add_submission 6519 3265 984621 658 100
add_submission 98321 78135 984621 1000 100
get_scoreboard 4984
end
Plain text

خروجی نمونه ۲🔗

1 3265 100 658
1 78135 100 1000
Plain text

ورودی نمونه ۳🔗

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 1 4 1 658 100
add_submission 3 2 1 1000 100
add_submission 4 2 1 1001 100
add_submission 7 2 3 123 66
change_final_submission 2 1 4
add_submission 1 3 1 1500 100
add_submission 1 3 1 658 100
add_submission 1 10 1 900 0
get_scoreboard 1
end
Plain text

خروجی نمونه ۳🔗

1 2 166 1124
2 3 100 658
2 4 100 658
4 10 0
Plain text
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.