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

در قسمت آموزشی برای حل سوالات، سه سری راهنمایی به انتهای سوالات اضافه می‌شود. زمان اضافه شدن راهنمایی‌ها را می‌توانید در قسمت آموزشی پایین سوالات ببینید.‌ همچنین می‌توانید سوال‌های خود را از بخش "سوال بپرسید" مطرح کنید.

مسابقه پیچیده


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

عرفان به تازگی با مسابقه QFC آشنا شده و تصمیم گرفته امسال در این رقابت‌ شرکت کند؛ از شانس خوب او با آمدن کرونا، این مسابقه به صورت آنلاین برگزار می‌شود و عرفان که با مسئول برگزاری این مسابقه دوست است می‌خواهد با کمک او بیشترین سود را از این مسابقه ببرد. نحوه برگزاری مسابقه‌ به شرح زیر است:

درون مسابقه دقیقا ۱۰ سوال قرار دارد و شرکت‌کنندگان ۳۰۰ دقیقه وقت دارند تا سوالات را حل کنند. بعد از اتمام مسابقه هر شرکت‌کننده تعدادی سوال را حل می‌کند (این تعداد می‌تواند صفر باشد) و به ازای هر سوال حل شده، تعداد ارسال‌های اشتباه و زمان حل سوال توسط آن فرد را داریم.

شرکت‌کنندگان به ترتیب اولویت زیر، رتبه‌بندی می‌شوند:

  • فردی که سوال بیشتری حل کرده رتبه بهتری می‌گیرد.
  • در صورت برابری تعداد سوالات حل شده، افراد بر حسب جریمه زمانی مرتب می‌شوند. منظور از جریمه زمانی هر سوال، زمانی که طول کشیده تا آن فرد سوال را حل کند، به علاوه تعداد ارسال‌های اشتباه آن فرد برای آن سوال، ضرب در ۲۰ است. جریمه زمانی یک فرد هم مجموع جریمه‌های زمانی سوالات حل شده توسط اوست.
  • در صورت برابری در جریمه زمانی دو فرد، زمان حل سوالات توسط آن‌ها را به صورت نزولی در نظر می‌گیریم و آن‌ دو را به ترتیب لغت‌نامه‌ای بررسی می‌کنیم؛ یعنی یک آرایه از یک آرایه دیگر کوچک‌تر است اگر در اولین اندیسی که آن دو با هم فرق دارند، عضو مربوط به آرایه اول کوچک‌تر باشد (یعنی اگر آخرین زمان حل فرد اول دقیقه ۳۰۰ باشد و زمان حل فرد دوم دقیقه ۲۹۰ باشد، فرد دوم رتبه بهتری کسب می‌کند)
  • در صورت برابری در آرایه زمان حل مسئول مسابقه، فرد بهتر را مشخص می‌کند که چون عرفان با او رفیق است، می‌توانید فرض کنید او رتبه برتر را کسب می‌کند.

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

  • فرد با رتبه rr، 5000/r\lfloor 5000/r \rfloor دلار جایزه می‌گیرد. توجه کنید که رتبه بهترین فرد ۱ است.
  • بعد از آن به افراد زیر مدال داده می‌شود (تضمین می‌شود تعداد افراد شرکت‌کننده حتما مضرب ۱۰ است).
    • افراد با رتبه‌های ۱ تا n/10\lfloor n/10 \rfloor، مدال طلا به همراه ۱۲۰۰ دلار پول می‌گیرند.
    • افراد بعدی تا رتبه 3n/10\lfloor 3n/10 \rfloor، مدال نقره به همراه ۸۰۰ دلار پول می‌گیرند.
    • افراد بعدی تا رتبه 6n/10\lfloor 6n/10 \rfloor، مدال برنز به همراه ۴۰۰ دلار پول می‌گیرند.
  • به ازای هر سوال، فردی که اولین بار آن را حل کند، ۸۰۰ دلار پول می‌گیرد.
  • اولین ارسال درست در کل زمان مسابقه هم ۷۰۰ دلار جایزه دارد.
  • آخرین ارسال درست در زمان مسابقه هم ۵۰۰ دلار جایزه دارد.

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

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

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

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

ورودی🔗

در خط اول ورودی تعداد شرکت‌کننده‌ها، nn، می‌آید. تضمین می‌شود nn مضرب ۱۰ است.

سپس در n1n - 1 خط بعدی اطلاعات شرکت‌کردن همه شرکت‌کننده‌ها به جز عرفان می‌آید. در هر خط وضعیت حل هر سوال توسط آن فرد می‌آید که با , از هم جدا شده است. یعنی به ازای هر سوال، اگر توسط آن فرد حل نشده بود، - و در غیر این صورت دو عدد tt و ww به ترتیب می‌آید که نشان‌دهنده زمان حل آن سوال توسط آن فرد و تعداد ارسال‌های اشتباه اوست.

سپس در خط آخر، اطلاعات حل سوالات توسط عرفان می‌آید. اگر عرفان نمی‌توانست آن سوال را حل کند،‌ - و در غیر این صورت به ترتیب، زمان مورد نیاز برای زدن کد آن سوال و تعداد پاسخ‌های نادرست او می‌آید.

10n10010 \le n \le 100 1t3001 \le t \le 300 0w100 \le w \le 10

خروجی🔗

در یک خط حداکثر پولی که عرفان می‌تواند به دست آورد را چاپ کنید.

مثال🔗

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

10
232 1,-,-,6 7,253 4,173 5,117 1,-,-,85 3
-,231 0,167 0,257 7,-,-,125 4,283 0,215 4,-
41 1,-,290 8,-,-,-,-,243 7,120 3,184 9
142 8,243 7,69 0,-,41 9,-,278 1,264 4,-,74 9
53 8,-,187 9,60 1,48 8,98 10,-,-,55 7,259 5
250 0,-,-,-,166 0,16 3,-,82 4,73 0,183 3
-,-,-,-,105 3,-,-,-,152 4,-
-,84 5,98 8,-,120 8,240 3,94 1,-,28 7,109 8
280 6,246 5,58 9,-,-,-,-,-,-,-
38 10,-,227 10,187 9,182 1,-,203 9,253 7,-,-
Plain text

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

1800
Plain text

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

10
232 1,-,-,6 7,253 4,173 5,117 1,-,-,85 3
-,231 0,167 0,257 7,-,-,125 4,283 0,215 4,-
41 1,-,290 8,-,-,-,-,243 7,120 3,184 9
142 8,243 7,69 0,-,41 9,-,278 1,264 4,-,74 9
53 8,-,187 9,60 1,48 8,98 10,-,-,55 7,259 5
250 0,-,-,-,166 0,16 3,-,82 4,73 0,183 3
-,-,-,-,105 3,-,-,-,152 4,-
-,84 5,98 8,-,120 8,240 3,94 1,-,28 7,109 8
280 6,246 5,58 9,-,-,-,-,-,-,-
38 10,-,20 10,187 9,20 1,-,203 9,40 7,-,30 4
Plain text

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

3614
Plain text

قسمت آموزشی🔗

در این قسمت راهنمایی‌های سوال، به مرور اضافه می‌شود. مشکلات‌تان در راستای حل سوال را می‌توانید از بخش "سوال بپرسید" مطرح کنید.

راهنمایی ۱

اولا که حالات مختلفی که عرفان می‌تواند، سوالات را حل کند حداکثر 10!10! است، بنابراین می‌توانیم به ازای هر حالت، بررسی کنیم که چند دلار پول می‌گیرد.

حال سعی می‌کنیم که به ازای یک حالت بررسی کنیم عرفان چند دلار پول می‌گیرد. برای این کار دو کلاس Contestant و ‍‍Problem تعریف می‌کنیم و سعی می‌کنیم با کمک آن‌ها کد سوال را بزنیم.

اولین کاری که باید برای حل سوال بکنید این است که یک تابع بنویسید که با گرفتن دو شی از نوع Contestant تشخیص دهد که کدام رتبه بهتری کسب می‌کند. برای این کار پیشنهاد می‌کنیم بخش رتبه‌بندی را با دقت بخوانید و سپس موارد گفته شده را پیاده‌سازی کنید.

راهنمایی ۲

اولا که کلاس Contestant باید ویژگی‌های زیر را داشته باشد:

  • یک لیست ده تایی از Problem ها
  • تعداد سوالات حل شده
  • میزان پنالتی کلی
  • یک متغیر بولی که مشخص می‌کند این شرکت‌کننده همان عرفان است یا نه.

خود Problem هم ویژگی‌های زیر را دارد.

  • یک متغیر بولی که مشخص می‌کند سوال حل شده یا نه.
  • زمان حل سوال
  • تعداد ارسال‌های اشتباه برای حل سوال

حال می‌توان با خواندن رشته‌های ورودی اشیا لازم برای nn شرکت‌کننده را ساخت. سپس می‌توانید از روی قوانین گفته شده به راحتی تابعی بنویسید که دو شرکت‌کننده را با هم مقایسه کند.

راهنمایی ۳

می‌توانید یک نمونه پیاده‌سازی در زبان C++ را ازینجا ببینید.

ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.