خوش‌آمد


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

تیمور پسری کم‌حافظه و عاشق برنامه‌نویسی است.

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

بنابراین تصمیم می‌گیرد رباتی را به‌گونه‌ای برنامه‌ریزی کند که هر سال، قبل از شروع هر سری از مسابقات کدکاپ، آغاز آن دوره از رقابت‌ها را به او اعلام کند.

توضیح تصویر

چون تیمور حافظه‌ی ضعیفی دارد، فراموش کرده است که چگونه باید کُد بزند :/. پس وظیفه‌ی شما این است که برنامه‌ی این ربات را به‌گونه‌ای بنویسید که با گرفتن یک عدد nn، که نشان‌دهنده‌ی nnاُمین دوره از مسابقات کدکاپ است، شروع آن دوره را اعلام کند.

ورودی🔗

در تنها خط ورودی، عدد طبیعی nn آمده است.

1n100 1 \le n \le 100

خروجی🔗

در تنها خط خروجی، باید عبارت Hello CodeCup n! را چاپ کنید که nn برابر با همان سال برگزاری مسابقات است.

  • به کوچکی و بزرگی حروف و فاصله‌ی بین کلمات دقت کنید.

مثال🔗

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

6
Plain text

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

Hello CodeCup 6!
Plain text

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

1
Plain text

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

Hello CodeCup 1!
Plain text

اتاق فرار


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

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

قفل این اتاق از دو دیسک دایره‌ای که هرکدام شامل ۵ عدد هستند، تشکیل شده است. این دو قفل در دو سطر و روی هم قرار گرفته‌اند. فرض کنید اعداد نوشته شده روی دیسک بالا به ترتیب از راست به چپ x1x_1، x2x_2، x3x_3، x4x_4 و x5x_5 و اعداد نوشته شده روی دیسک پایین به ترتیب از راست به چپ y1y_1، y2y_2، y3y_3، y4y_4 و y5y_5 باشند.

برای مثال فرض کنید اعداد نوشته شده روی دیسک‌های قفل به صورت زیر باشند:

1 8 9 7 2
3 4 5 0 6
Plain text

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

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

9 7 2 1 8
6 3 4 5 0 
Plain text

توضیح تصویر

باز شدن قفل از قاعده‌ی جمع رقمی پیروی می‌کند. بدین صورت که از هر دو دیسک، فقط سه رقم وسط در نتیجه تاثیر دارند. قفل به صورت خودکار هر یک از این سه رقم از دیسک بالا (x4,x3,x2x_4, x_3, x_2) را با رقم متناظرش در دیسک دوم (y4,y3,y2y_4, y_3, y_2) به صورت رقمی جمع می‌کند.

توضیح تصویر

جمع رقمی یعنی فقط یکان حاصل جمع در نظر گرفته می‌شود. در نهایت، یک عدد سه رقمی تولید می‌شود. (ممکن است این عدد با ۰ شروع شود.) اگر این عدد سه رقمی به عدد ۶ بخش‌پذیر بود، درب باز می‌شود. حال وظیفه‌ی شما این است که با چرخش دادن هر یک از این دو قفل، کاری کنید که درب باز شود یا اعلام کنید که چنین کاری غیرممکن است.

ورودی🔗

ورودی تنها شامل دو سطر است در سطر اول ورودی ۵ رقم اولیه نوشته شده روی دیسک بالا و در سطر دوم ۵ رقم اولیه نوشته شده روی دیسک دوم را نشان می‌دهد.

همچنین در این رقم‌ها هر یک از ارقام ۰ تا ۹ دقیقاَ یک بار آمده‌اند.

خروجی🔗

در صورتی که می‌توان قفل را باز کرد، با چاپ عبارت Boro joloo :) به تیمور اعلام کنید که شما در حال باز کردن درب هستید تا او به سمت درب خروجی راه بیوفتد. در غیر این صورت با چاپ عبارت Gir oftadi :( به او اعلام کنید که تا ابد در این اتاق گیر افتاده است. به خروجی‌های نمونه دقت کنید.

مثال🔗

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

1 8 9 7 2
3 4 5 0 6
Plain text

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

Boro joloo :)
Plain text

پاسخ این نمونه در صورت سوال توضیح داده شده است.

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

1 3 5 7 9
0 2 4 6 8
Plain text

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

Gir oftadi :(
Plain text

ماشین حساب


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

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

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

توضیح تصویر

قوانین ماشین‌حساب تیمور🔗

قانون اول

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

قانون دوم

اگر تعداد اعداد مثبت از اعداد منفی بیشتر بود به علت اینکه تیمور فرد عدالت‌محوری است تا جایی که بتواند عدالت را بین اعداد مثبت و منفی، همانند قانون اول رعایت می‌کند. اما اعدادی که از این قانون پیروی نمی‌کنند را در کنار هم می‌گذارد و آن ها را اعداد بدون عدالت می‌خواند.و اگر بزرگترین عددِ اعداد بدون عدالت از حاصل اعداد دارای عدالت بیشتر بود، منفی شده تا عدالت بیشتری برقرار شود در غیر این صورت هویت خود را حفظ می‌کند و در گروه اعداد بدون عدالت می‌ماند. سپس اعدادی که بدون عدالت هستند، به ترتیب از بزرگ به کوچک در کنار اعداد دارای عدالت ظاهر می‌شوند. در آخر تیمور تاکید می‌کند که تنها یک بار می‌توان از این قانون استفاده کرد. (برای درک بهتر این قانون توضیحات نمونه ورودی ۲ را بخوانید)

قانون سوم

اگر تعداد اعداد منفی از اعداد مثبت بیشتر بود به علت اینکه تیمور فرد عدالت‌محوری است تا جایی که بتواند عدالت را بین اعداد مثبت و منفی، همانند قانون اول رعایت می‌کند. اما اعدادی که از این قانون پیروی نمی‌کنند را در کنار هم می‌گذارد و آن ها را اعداد بدون عدالت می‌خواند و اگر حاصل اعداد دارای عدالت، منفی بود، کوچکترین عددِ اعداد بدون عدالت، مثبت شده تا عدالت بیشتری برقرار شود در غیر این صورت هویت خود را حفظ می‌کند و در گروه اعداد بدون عدالت باقی می‌ماند. سپس اعدادی که بدون عدالت هستند، به ترتیب از بزرگ به کوچک در کنار اعداد دارای عدالت ظاهر می‌شوند. در آخر تیمور تاکید می‌کند که تنها یک بار می‌توان از این قانون استفاده کرد. (برای درک بهتر این قانون توضیحات نمونه ورودی ۳ را بخوانید)

قانون چهارم

تیمور آخرین قانون را این گونه بیان کرد که اگر قبل از عدد ۰ علامت + بیاید آن را جزو گروه اعداد مثبت و اگر علامت - بیاید آن را باید جزو گروه اعداد منفی دانست.

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

ورودی🔗

ورودی تنها شامل یک خط است که در آن ، عملیات ریاضی تیمور برای ماشین حساب ، به طول حداکثر ۱۰۰۰ آمده است. همچنین تضمین می‌شود که عملیات ریاضی وارد شده، حتما از یکی از قوانین پیروی می‌کند و هر کدام از اعدادِ عملیات از 101510^{15} کوچک‌تر است و حاصل کل عبارت هیج‌گاه از مثبت 101810^{18} بزرگ‌تر و از منفی 101810^{18} کوچک‌تر نخواهد شد.

خروجی🔗

در تنها خط خروجی باید عملیات را به گونه‌ای تغییر دهید تا ماشین‌حساب بتواند آن را بر اساس قوانین خودساخته تیمور تحلیل کند و حاصل آن را حساب کند.

توجه : اگر حاصل عبارت مثبت یا صفر بود آن را بدون هیچ علامتی نمایش می‌دهیم.

مثال🔗

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

+6+66+666-6666-66666-66
Plain text

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

+666-66+66-6666+6-66666=-72660
Plain text

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

+9+7+8+11-1
Plain text

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

+11-1+9+8+7=34
Plain text

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

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

+1-12-17-19-20
Plain text

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

+1-12+20-17-19=-27
Plain text

با توجه به اینکه تعداد اعداد منفی از اعداد مثبت بیشتر است، باید از قانون سوم استفاده کرد. از آنجایی که ابتدا قانون اول اجرا می‌شود، حاصل این قانون برابر ۱۱- خواهد بود. پس کوچکترین عددِ اعداد بدون عدالت، دستخوش تغییر می‌شود و دیگر اعدادِ بدون عدالت، هویت خود را حفظ می‌کنند.

سیستم کنترل برق


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

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

توضیح تصویر

فروشگاه دارای nn لامپ است که از ۱ تا nn شماره‌گذاری شده‌اند. لامپ‌های این فروشگاه شامل دو نوع سنسوری و کلیدی هستند:

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

علاوه بر ویژگی‌های گفته شده، هر لامپ یک مقدار pip_i دارد که نشان‌دهنده‌ی توان آن است. لامپ iiاُم به ازای هر یک ثانیه‌ای که روشن باشد، pip_i واحد انرژی مصرف می‌کند.

نحوه‌ی محاسبه‌ی هزینه‌ی برق برای لامپ‌ها نیز به صورت پله‌ای است. به طور دقیق‌تر، قیمت برق دارای kk پله است و پله‌ی iiاُم، دارای دو ویژگی EiE_i و PiP_i است که به ترتیب، نشان‌دهنده‌ی حداکثر میزان انرژی‌ای که در این پله قرار می‌گیرد و قیمت هر واحد انرژی مربوط به آن پله است.

برای محاسبه‌ی قیمت برق در یک ماه، تیمور ابتدا باید محاسبه کند که کل لامپ‌ها در کنار هم، چه مقدار انرژی مصرف کرده‌اند (این مقدار را EE در نظر می‌گیریم). سپس کوچکترین پله‌ی iiای را پیدا می‌کند که EiE_i آن، از مقدار مصرفی کل ماه، کمتر نباشد (EEiE \le E_i). پس از آن مقدار هر واحد انرژی در آن ماه را به دست می‌آورد که برابر با PiP_i می‌شود. در نتیجه قیمت کل انرژی مصرفی در آن ماه برابر با Pi×EP_i \times E خواهد بود.

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

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

ورودی🔗

در خط اول ورودی عدد nn آمده است که نشان‌دهنده‌ی تعداد لامپ‌ها است. در خط iiاُم از nn خط بعدی، توضیح لامپ iiاُم آمده است. قالب توضیح هر لامپ نیز به صورت زیر خواهد بود:

قالب ورودی لامپ‌ها

قالب ورودی لامپ‌ها به یکی از شکل‌های زیر است:

SWITCH p_i
SENSOR p_i t_i
Plain text

خط اول نشان‌دهنده‌ی یک لامپ از نوع کلیدی با توان pip_i است و خط دوم نیز نشان‌دهنده‌ی یک لامپ سنسوری با توان pip_i و مهلت tit_i است.

1n1001 \le n \le 100 1pi2001 \le p_i \le 200 1ti1001 \le t_i \le 100

در خط بعدی، عدد kk آمده است که نشان‌دهنده‌ی تعداد پله‌های قیمت برق است. در خط iiاُم از kk خط بعدی نیز به ترتیب دو مقدار EiE_i و PiP_i آمده است که نشان‌دهنده‌ی حداکثر میزان انرژی پله‌ی iiاُم و قیمت هر واحد انرژی در آن پله است.

1k101 \le k \le 10 1Ei6×10101 \le E_i \le 6 \times 10 ^ {10} 1Pi1061 \le P_i \le 10 ^ 6

تضمین می‌شود مقدار EiE_iها و PiP_iها به صورت صعودی در ورودی می‌آیند و همچنین مقدار آخرین EiE_i حداقل به اندازه‌ی مجموع کل انرژی مصرفی است.

در خط بعدی عدد mm داده شده است که نشان‌دهنده‌ی تعداد گزارش‌ها است و در هر یک از mm خط بعدی نیز یک گزارش آمده است. قالب هر گزارش نیز به صورت زیر خواهد بود:

قالب ورودی هر گزارش

قالب ورودی هر گزارش به صورت زیر است:

LAMP_ID TIME
Plain text

که در آن LAMP_ID نشان‌دهنده‌ی شماره‌ی لامپی است که گزارش به آن تعلق دارد و TIME هم نشان‌دهنده‌ی زمانی است که آن تغییر رخ داده است. هر گزارش مربوط به یک لامپ است و در صورتی که لامپ مورد نظر از نوع سنسوری باشد، این گزارش بدان معناست که یک سیگنال برای این سنسور فرستاده شده است و اگر از نوع کلیدی باشد، یعنی وضعیت کلید آن لامپ تغییر کرده است (اگر لامپ روشن باشد، خاموش می‌شود و برعکس).

قالب TIMEها نیز تضمین می‌شود به شکل زیر خواهد بود:

DD hh:mm:ss
Plain text

که در آن DD و hh و mm و ss به ترتیب نشان‌دهنده‌ی روز و ساعت و دقیقه و ثانیه‌ی رخ دادن آن رخداد است.

1m1 0001 \le m \le 1\ 000 1LAMP_IDn1 \le LAMP \_ ID \le n 1DD311 \le DD \le 31 0hh230 \le hh \le 23 0mm590 \le mm \le 59 0ss590 \le ss \le 59 در صورتی که لامپی تا لحظه‌ی 31 23:59:59 روشن بود، فرض می‌کنیم در این لحظه خاموش می‌شود. همچنین فرض می‌کنیم ماهی که در آن هستیم ۳۱ روزه است و آخرین لحظه‌ی آن، لحظه‌ی 31 23:59:59 است.

تضمین می‌شود گزارش‌ها به ترتیب TIMEشان در ورودی می‌آیند.

خروجی🔗

خروجی برنامه‌ی شما باید شامل یک خط باشد که مقدار هزینه‌ی برق در آن ماه را نشان می‌دهد.

زیرمسئله‌ها🔗

زیرمسئله نمره محدودیت
۱ ۸۱ لامپ‌ها فقط از نوع کلیدی هستند
۲ ۱۳۵ لامپ‌ها فقط از نوع سنسوری هستند
۳ ۵۴ بدون محدودیت اضافی

مثال🔗

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

2
SWITCH 1
SENSOR 2 2
4
2 1
5 3
11 4
15 5
4
1 01 00:00:00
1 01 00:00:05
2 01 00:00:10
2 01 00:00:11
Plain text

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

44
Plain text

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

2
SWITCH 19
SENSOR 200 11
4
190864635 992101
776902253 992469
785256700 992509
1071360000 999462
5
1 13 21:54:16
2 16 02:40:30
1 21 12:28:38
2 25 22:11:09
1 28 22:11:26
Plain text

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

17402369233425
Plain text

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

5
SWITCH 192
SWITCH 151
SWITCH 114
SWITCH 130
SWITCH 199
5
1747205084 11955
2653259616 296990
2669525672 525837
2674590960 538566
2678400000 599601
5
2 07 00:28:30
2 13 00:23:38
4 19 00:58:13
4 25 00:45:29
1 31 00:52:47
Plain text

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

1930822545060
Plain text

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

5
SENSOR 140 71
SENSOR 2 87
SENSOR 118 1
SENSOR 124 95
SENSOR 163 99
5
1773541254 973043
2355710147 992059
2414994190 997228
2481482739 998282
2678400000 998941
5
4 07 00:09:39
1 13 00:15:35
3 19 00:10:28
5 25 00:16:59
1 31 00:10:32
Plain text

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

46623355345
Plain text

کانتر


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

تیمور عاشق بازی کانتر و شبانه روز مشغول بازی است! برای همین می‌خواهد حالت خاصی از بازی کانتر (Counter-Strike) را پیاده سازی کند. برای آخرین بار به تیمور کمک کنید تا از این چالش هم عبور کند.

توضیح تصویر

بازی کانتر یک بازی تفنگی اول شخص است، در این بازی ۲ تیم با حداکثر ۱۰ نفر وجود دارد. یک تیم «تروریست» (Terrorist) و یک تیم «ضدتروریست»(Counter-Terrorist) است. بازی RR «دست» دارد و در هر دست این دو تیم به سمت هم تیراندازی می‌کنند و می‌خواهند یکدیگر را نابود کنند. مدت هر «دست» از بازی ۰۲:۱۵:۰۰۰ (۲ دقیقه و ۱۵ ثانیه) است. اگر هیچ کدام از اعضای یک تیم در لحظه پایان یک دست زنده نباشد بازنده است. اگر مدت بازی تمام شود و از هر دو تیم بازیکنی زنده مانده باشد تیم «ضدتروریست» برنده این دست می‌شود. اگر در یک دست هیچ بازیکنی زنده نباشد (یا حتی هیچ بازیکنی وارد بازی نشده باشد!) تیم ضدتروریست برنده است.

اسلحه‌های این بازی🔗

هر بازیکن می‌تواند حداکثر یک اسلحه از دسته «سنگین» و حداکثر یک اسلحه از دسته «کمری» بخرد، همچنین هر بازیکن به صورت پیش‌فرض یک «چاقو» دارد. خرید اسلحه فقط در ۴۵ ثانیه اول بازی ممکن است. به عبارت دیگر خرید‌های بعد از لحظه 00:45:00 (شامل این لحظه) انجام نمی‌شود.

اسلحه‌های تیم تروریست

اسلحه‌ی سنگین🔗

اسم قیمت میزان کاهش جان مقدار پول کشتن
AK 2700 31 100
AWP 4300 110 50

اسلحه‌ی کمری🔗

اسم قیمت میزان کاهش جان مقدار پول کشتن
Revolver 600 51 150
Glock-18 300 11 200

چاقو🔗

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

اسلحه‌های تیم ضدتروریست

اسلحه‌ی سنگین🔗

اسم قیمت میزان کاهش جان مقدار پول کشتن
M4A1 2700 29 100
AWP 4300 110 50

اسلحه‌ی کمری🔗

اسم قیمت میزان کاهش جان مقدار پول کشتن
Desert-Eagle 600 53 175
UPS-S 300 13 225

چاقو🔗

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

جان بازیکنان و اهمیت آن🔗

در ابتدای هر دست، هر کدام از بازیکنان ۱۰۰ واحد جان (health) دارند. (حتی اگر در دست قبل کشته شده باشند دوباره زنده می‌شوند.) در زمان بازی هر کدام از بازیکنان می‌توانند به سمت هم شلیک کنند، در اثر هر شلیک بسته به تفنگی که با آن شلیک شده مقداری از جان بازیکنی که به آن شلیک شده، کاهش پیدا می‌کند. اگر جان کسی به ۰ برسد می‌میرد و از بازی خارج می‌شود و دیگر توانایی انجام هیچ کاری ندارد. اگر یک بازیکن به هم تیمی خودش شلیک کند چیزی از جان آن کم نمی‌شود. هر بازیکن پس از کشتن هر بازیکن از تیم حریف، بسته به نوع سلاحش مقداری «پول» کسب می‌کند. کسی امتیاز کشتن را می‌گیرد که جان آن بازیکن را برای اولین بار به ۰ برساند. توجه کنید جان هیچ کسی منفی نمی‌شود. یعنی اگر میزان کاهش جان یک شلیک، بیشتر از مقدار فعلی جان بازیکن مورد هدف باشد، مقدار جان آن بازیکن ۰ می‌شود.

پول بازیکنان و کاربردهای آن🔗

بازیکن‌ها برای خریدن اسلحه‌ها به پول (money) نیاز دارند. بلافاصله بعد از اضافه شدن هر بازیکن به بازی ۱۰۰۰ دلار به آن بازیکن داده می‌شود. (ممکن است بازیکنی وسط یک دست به بازی اضافه شود.) بعد از پایان هر دست از بازی به هر کدام از بازیکنان تیم برنده ۲۷۰۰ دلار و به هر کدام از بازیکن تیم بازنده ۲۴۰۰ دلار داده می‌شود. همچنین حداکثر مقدار پول یک بازیکن ۱۰,۰۰۰ دلار است. یعنی اگر مقدار پولی که به یک بازیکن اضافه می‌شود، باعث شود که پول‌های آن بیشتر از ۱۰,۰۰۰ دلار شود، مقدار پول بازیکن را همان ۱۰,۰۰۰ دلار در نظر می‌گیریم.

زمان‌ها در بازی🔗

برای نشان دادن اتفاقات بازی در انتهای هر اتفاق یک برچسب زمان که به صورت یک رشته است چاپ می‌کنیم. فرمت این رشته به صورت mm:ss:ttt است که زمان را در دقیقه mm، ثانیه ss و ttt میلی ثانیه نشان می‌دهد. مثلاً 01:48:932 یعنی این اتفاق ۱ دقیقه و ۴۸ ثانیه و ۹۳۲ میلی‌ثانیه بعد از شروع این دست از بازی است. تضمین می‌شود زمان‌های هر دست طوری داده می‌شود که هیچ دو اتفاقی همزمان رخ ندهد. همچنین هیچوقت در لحظه شروع و پایان دست هیچ اتفاقی نمی‌افتد. در واقع همه زمان‌های اتفاقات بین 00:00:001 و 02:14:999 است. تضمین می‌شود تمام اتفاقات به ترتیب زمان‌ صعودی است.

یک دست از بازی🔗

زمان‌هایی که در انتهای گزارش یک اتفاق است از زمان شروع آن دست است در نظرگرفته می‌شود نه زمان شروع اولین دست بازی. وقتی یک بازیکن بعد از ثانیه 00:03:00 (شامل این لحظه) در یک دست وارد بازی می‌شود به صورت مرده وارد می‌شود (اما این مردن جزو تعداد دفعات کشته شدن به حساب نمی‌آید.) یعنی جان این بازیکن ۰ و پول آن ۱۰۰۰ است و از دست بعدی می‌تواند فعالیت خود را شروع کند. توجه کنید حتی بازیکنی که از اواسط بازی وارد می‌شود پولی که بابت بردن یا باختن آن دست بدست می‌آورد را دریافت می‌کند. بازیکنان پول‌های بدست آورده خود را از یک دست به دست بعدی منتقل می‌کنند. همه بازیکن‌ها در شروع یک دست جان ۱۰۰ خواهند داشت. مستقل از اینکه در دست قبلی زنده مانده‌اند یا کشته شده باشند. بازیکنان زنده اسلحه‌های خریداری شده خود را از یک دست به دست بعدی می‌برند اما بازیکنان مرده اسلحه‌های خود (به جز چاقو) را در دست بعدی از دست می‌دهند.

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

بعد از تمام شدن هر دست نام تیم برنده را چاپ کنید. یعنی اگر تیم تروریست برنده این دست است کلمه Terrorist won و اگر تیم ضدتروریست برنده این دست است کلمه Counter-Terrorist won را چاپ کنید.

رهنمای خواندن دستورها🔗

  • مواردی که داخل <> قرار داردند یعنی مقدار مناسبی به جای آن‌ها قرار خواهد گرفت.

  • مواردی که داخل [] با \ جدا می‌شوند یعنی دقیقاً یکی از این موارد در ورودی می‌آید.

  • منظور از سایر موارد همان کلمات با همان کاراکترها است.

  • <username> و <gun_name> : همواره یک رشته به طول حداقل ۱ حداکثر ۲۰ از کاراکتر شامل حروف کوچک و بزرگ انگلیسی ارقام و یا _ و - است.

  • <time>: فرمت این رشته به صورت mm:ss:ttt است که زمان را در دقیقه mm، ثانیه ss و ttt میلی ثانیه نشان می‌دهد.

توجه کنید سیستم داوری به کوچک و بزرگ بودن حروف حساس است.

فاز اول🔗

پیاده سازی دستورات این بخش ۲۰ درصد نمره سوال را دریافت خواهید کرد.

دستور ADD-USER
ADD-USER <username> [Counter-Terrorist/Terrorist] <time>
Plain text

در این درخواست شخصی با نام <username> در لحظه <time> به یکی از تیم‌های تروریست یا ضدتروریست ملحق می‌شود.

همواره بعد از <username> دقیقاً یکی از رشته‌های Terrorist (تروریست) یا Counter-Terrorist (ضدتروریست) می‌آید که به ترتیب نشان‌دهنده تیم‌ای است که این بازی‌کن به آن ملحق می‌شود.

در صورتی که مشکلات زیر وجود داشته به ترتیب باید دقیقاً یکی از خطاهای زیر را چاپ کنید. اگر چند مورد باهم به وجود آمد موردی که شماره کمتری دارد باید انجام شود.

  1. اگر بازیکنی (در هر کدام از این دو تیم) با چنین نام کاربری قبلاً وارد بازی شده است پیام you are already in this game را چاپ کنید.
  2. اگر ظرفیت تیمی که می‌خواهد این بازیکن به آن ملحق شود تکمیل است. یعنی در آن لحظه در تیم مورد نظر این بازیکن ۱۰ بازیکن قرار دارد، پیام this team is full را چاپ کنید.
  3. در غیر این صورت این بازیکن را به تیم مورد نظر اضافه کنید و پیام this user added to [Terrorist/Counter-Terrorist] را چاپ کنید و در جای رشته آخر نام تیم را قرار دهید.

مثال ورودی از این دستور:

ADD-USER RaB1t Terrorist 00:17:415
ADD-USER madam Counter-Terrorist 01:03:618
Plain text
دستور GET-MONEY
GET-MONEY <username> <time>
Plain text

در این دستور از شما می‌خواهیم مقدار پول بازیکن <username> را در لحظه <time> چاپ کنید.

اگر بازیکنی با نام کاربری <username> در این لحظه در بازی وجود ندارد پیام invalid username را چاپ کنید.

مثال ورودی از این دستور:

GET-MONEY Cat 00:43:151
Plain text
دستور GET-HEALTH
GET-HEALTH <username> <time>
Plain text

در این دستور از شما می‌خواهیم مقدار جان بازیکن <username> را در لحظه <time> چاپ کنید.

اگر بازیکنی با نام کاربری <username> در این لحظه در بازی وجود ندارد پیام invalid username را چاپ کنید. توجه کنید اگر این بازیکن مرده باشد مقدار جان آن ۰ است.

مثال ورودی از این دستور:

GET-HEALTH Rajab 00:59:301
Plain text

فاز دوم🔗

پیاده سازی دستورات این بخش ۶۰ درصد نمره سوال را دریافت خواهید کرد.

دستور TAP
TAP <attacker> <attacked> [heavy/pistol/knife] <time>
Plain text

در این دستور اعلام می‌کنیم بازیکنی با نام کاربری <attacker> به بازیکنی با نام کاربری <attacked> با اسلحه heavy یا pistol یا knife خود در لحظه <time> ضربه می‌زند.

  1. اگر یکی از بازیکن‌های <attacker> یا <attacked> در این لحظه در بازی وجود ندارند پیام invalid username را چاپ کنید.
  2. اگر <attacker> قبل از این لحظه کشته شده است، پیام attacker is dead را چاپ کنید.
  3. اگر <attacked> قبل از این لحظه (نه بخاطر این شلیک) کشته شده است، پیام attacked is dead را چاپ کنید.
  4. در صورتی که <attacker> اسلحه‌ای با این نوع ندارد، پیام no such gun را چاپ کنید.
  5. اگر <attacker> و <attacked> هر دو یک تیم هستند پیام friendly fire را چاپ کنید.

در غیر اینصورت شلیک را ثبت کنید و پیام nice shot را چاپ کنید.

مثال ورودی از این دستور:

TAP RaB1t King2Krazy heavy 01:17:915
TAP A B knife 02:11:120
Plain text
دستور BUY
BUY <username> <gun_name> <time>
Plain text

در این دستور بازیکن <username> درخواست خریدن تفنگ <gun_name> را در لحظه <time> دارد.

  1. اگر بازیکنی با نام <username> در بازی وجود ندارد پیام invalid username را چاپ کنید.
  2. اگر بازیکن <username> زنده نیست پیام deads can not buy را چاپ کنید.
  3. اگر <time> بعدز از لحظه 00:45:00 (شامل این لحظه) این دستور آمده است پیام you are out of time را چاپ کنید.
  4. اگر اسلحه <gun_name> در لیست اسلحه‌های مجاز تیم خرید کننده نیست پیام invalid category gun را چاپ کنید.
  5. اگر اسلحه‌ای از این دسته (سنگین heavy و کمری pistol) قبلاً توسط این بازیکن خریداری شده است پیام you have a [heavy/pistol] را چاپ کنید.
  6. اگر این بازیکن پول کافی برای خرید این اسلحه را ندارد پیام no enough money را چاپ کنید.

در صورتی که هیچ‌کدام از اتفاقات فوق نیفتید پیام I hope you can use it را چاپ کنید و اسلحه را برای این بازیکن ثبت کنید.

مثال ورودی از این دستور:

BUY Dog M4A1 00:27:014
Plain text

فاز سوم🔗

پیاده سازی دستورات این بخش ۲۰ درصد نمره سوال را دریافت خواهید کرد.

دستور SCORE-BOARD
SCORE-BOARD <time>
Plain text

در این دستور از شما می‌خواهیم لیست بازیکن‌های تیم ضدتروریست و تروریست را چاپ کنید.

برای هر بازیکن مشخصات آن بازیکن را در یک سطر چاپ می‌کنیم:

<rank> <username> <kills> <death>
Plain text

که <username> نام‌کاربری بازیکن، <kills> تعداد بازیکن‌هایی است که در تمام دست‌های بازی قبل از لحظه <time> (شامل همین دست) توسط این بازیکن کشته‌شده است. <killed> تعداد دفعاتی است که این بازیکن در تمام دست‌ها تا قبل از لحظه <time> (شامل همین دست) توسط بازیکن دیگری کشته‌شده است. <rank> نشان دهنده شماره بازیکن است. یعنی برای بازیکنی که مشخصات آن دفعه اول چاپ می‌شود عدد ۱، بازیکن دوم عدد ۲ و ... . این شماره‌گذاری‌ها برای هر تیم جداست.

مشخصات بازیکنی زودتر چاپ می‌شود که تعداد <kills> آن بیشتر باشد، اگر دو بازیکن تعداد <kills> برابری داشته باشند مشخصات بازیکنی زودتر چاپ می‌شود که تعداد <killed> کمتری دارد. اگر دو بازیکن در هر دوی این اعداد برابر بودند بازیکنی زودتر چاپ می‌شود که زودتر وارد بازی شده باشد.

برای چاپ کردن جدول امتیازات ابتدا عبارت :Counter-Terrorist-Players را در یک خط چاپ کنید که نشان‌دهنده این است که می‌خواهیم بایکنان این تیم را بنویسیم. سپس مشخصات هر کدام از بازیکنان تیم ضدتروریست را مطابق توضیحات فوق در یک سطر چاپ می‌کنیم. سپس عبارت :Terrorist-Players را در سطر بعدی چاپ می‌کنیم و در سطرهای بعدی مشخصات بازیکنان تیم ضدتروریست را چاپ می‌کنیم.

ورودی🔗

در سطر اول ورودی عدد صحیح و مثبت RR آمده است. که نشان‌دهنده تعداد دست‌هایی است که در این ورودی آمده است. 1R151 \le R \le 15 برای نشان دادن شروع هر دست در یک سطر کلمه ROUND می‌آید. سپس با یک فاصله عدد صحیح و نامنفی nn می‌آید که نشان‌دهنده تعداد دستوراتی است که در این دست اتفاق افتاده است. (توجه کنید مقدار nn می‌تواند برابر ۰ باشد اما حداقل یک دستور در کل بازی داریم.)

تضمین می‌شود تعداد دستورهای ورودی از ۲۰۰۰ بیشتر نخواهد شد.

برای بهتر متوجه شدن ورودی‌ها به مثال‌های نمونه توجه کنید.

خروجی🔗

باید به ازای هر دستور آمده در ورودی خروجی متناظر آن را در یک سطر مجزا چاپ کنید. بعد از پایان هر دست برنده آن دست را چاپ کنید. یعنی اگر تیم تروریست برنده این دست است عبارت Terrorist won و در صورتی که تیم ضدتروریست برنده این دست است عبارت Counter-Terrorist won را در یک سطر مجزا چاپ کنید.

ورودی نمونه ۱

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

3
ROUND 6
ADD-USER King2Krazy Counter-Terrorist 00:01:130
ADD-USER Cat Terrorist 00:02:314
GET-MONEY King2Krazy 00:04:411
GET-MONEY Cat 00:04:715
GET-HEALTH King2Krazy 00:05:004
GET-HEALTH Cat 00:14:000
ROUND 1
TAP King2Krazy Cat knife 00:15:741
ROUND 8
TAP King2Krazy Cat knife 00:13:000
TAP King2Krazy Cat knife 00:15:001
TAP King2Krazy Cat knife 00:16:023
GET-MONEY King2Krazy 01:04:411
GET-MONEY Cat 01:04:715
GET-HEALTH King2Krazy 01:05:004
GET-HEALTH Cat 01:14:051
SCORE-BOARD 01:17:200
Plain text

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

this user added to Counter-Terrorist
this user added to Terrorist
1000
1000
100
100
Counter-Terrorist won
nice shot
Counter-Terrorist won
nice shot
nice shot
nice shot
6900
5800
100
0
Counter-Terrorist-Players:
1 King2Krazy 1 0
Terrorist-Players:
1 Cat 0 1
Counter-Terrorist won
Plain text
ورودی نمونه ۲

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

1
ROUND 37
ADD-USER John-Wick Counter-Terrorist 00:00:541
ADD-USER Yuri-Boyka Counter-Terrorist 00:01:130
ADD-USER Bruce-Lee Terrorist 00:01:907
ADD-USER John-Wick Counter-Terrorist 00:02:181
ADD-USER johnwick Counter-Terrorist 00:03:777
GET-MONEY John-Wick 00:03:813
GET-HEALTH Bruce-Lee 00:04:465
GET-MONEY johnwick 00:05:000
BUY John-Wick AK 00:06:000
BUY John-Wick AWP 00:07:000
BUY John-Wick Desert-Eagle 00:08:000
BUY Yuri-Boyka M4A1 00:09:000
BUY Yuri-Boyka UPS-S 00:10:000
BUY Yuri-Boyka Desert-Eagle 00:11:000
BUY Bruce-Lee AK 00:12:000
BUY Bruce-Lee Glock-18 00:13:000
BUY johnwick Desert-Eagle 00:14:000
GET-MONEY John-Wick 00:15:000
GET-MONEY Yuri-Boyka 00:16:000
GET-MONEY Bruce-Lee 00:17:000
GET-MONEY johnwick 00:18:000
TAP John-Wick Yuri-Boyka heavy 00:19:000
TAP John-Wick Yuri-Boyka pistol 00:20:000
TAP John-Wick Yuri-Boyka knife 00:21:000
TAP Yuri-Boyka John-Wick heavy 00:22:000
TAP Yuri-Boyka John-Wick pistol 00:23:000
TAP Yuri-Boyka John-Wick knife 00:24:000
TAP Yuri-Boyka Bruce-Lee heavy 00:25:000
TAP Yuri-Boyka Bruce-Lee pistol 00:26:000
TAP Yuri-Boyka Bruce-Lee knife 00:27:000
TAP Bruce-Lee Yuri-Boyka heavy 00:28:000
TAP Bruce-Lee Yuri-Boyka pistol 00:29:000
TAP Bruce-Lee Yuri-Boyka knife 00:30:000
GET-HEALTH John-Wick 01:31:000
GET-HEALTH Yuri-Boyka 01:32:000
GET-HEALTH Bruce-Lee 01:33:000
GET-HEALTH johnwick 01:34:000
Plain text

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

this user added to Counter-Terrorist
this user added to Counter-Terrorist
this user added to Terrorist
you are already in this game
this user added to Counter-Terrorist
1000
100
1000
invalid category gun
no enough money
I hope you can use it
no enough money
I hope you can use it
you have a pistol
no enough money
I hope you can use it
deads can not buy
400
700
700
1000
no such gun
friendly fire
friendly fire
no such gun
friendly fire
friendly fire
no such gun
nice shot
nice shot
no such gun
nice shot
nice shot
100
46
44
0
Counter-Terrorist won
Plain text