کاکتوس‌های پردردسر - C/Swift


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

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

دسته iiام شامل aia_i نفر است. اگر افراد آن دسته حداکثر ۳ نفر باشند امیرمحمد به اندازه تعداد نفراتشان به آن‌ها کاکتوس می‌دهد؛ در غیر این صورت تنها یک کاکتوس به کل دسته می‌دهد.

به شما تعداد افراد هر دسته داده می‌شود. شما باید به ازای هر دسته، تعداد کاکتوس‌هایی راکه امیرمحمد به آن‌ها می‌دهد را با چاپ کردن کارکتر ‍‍* نشان دهید.

ورودی🔗

در خط اول ورودی عدد طبیعی nn داده میشود که نشانگر تعداد دسته افراد مراجعه کننده به امیرمحمد است.

در خط بعدی nn عدد طبیعی داده می‌شود که عدد iiام نشانگر تعداد افراد دسته iiام است. 1n,ai1001 \le n, a_i \le 100

خروجی🔗

خروجی برنامه شما شامل nn خط است که باید در خط iiام باید به اندازه تعداد کاکتوس‌هایی که امیرمحمد به دسته iiام میدهد '*' چاپ کنید.

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

5
1 5 2 4 3
Plain text

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

*
*
**
*
***
Plain text

بازی - C#/Go


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

تعداد nn عدد طبیعی روی تخته نوشته شده. امیر و محمد می‌خواهند از روی آن، یک آرایه درست کنند.

ابتدا امیر بزرگ‌ترین عدد روی تخته را انتخاب می‌کند و در خانه اول آرایه قرار می‌دهد و آن عدد را از روی تخته پاک می‌کند (اگر از بزرگ‌ترین عدد چندتا روی تخته وجود داشت امیر یکی از آن‌ها به دلخواه را پاک می‌کند)؛ سپس محمد کوچکترین عدد روی تخته را در خانه دوم آرایه قرار می‌دهد و آن را از روی تخته پاک می‌کند (اگر از کوچکترین عدد چندتا روی تخته وجود داشت محمد یکی از آن هارا پاک کند).

امیر این بار بزرگترین عدد را در خانه سوم قرار می‌دهد و به ترتیب یکی در میان، آرایه را می‌سازند(ساخت آرایه وقتی تمام میشود که تمام اعداد روی تخته پاک شوند).

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

ورودی🔗

در خط اول عدد nn که نشانگر تعداد اعداد روی تخته است داده میشود. در خط دوم nn عدد طبیعی داده میشود که نشانگر اعداد روی تخته هستند. 1n100 1 \le n \le 100 اعداد روی تخته همگی کوچکترمساوی ۱۰۰ هستند.

خروجی🔗

در تنها خط خروجی باید آرایه نهایی ساخته شده توسط امیر و محمد را چاپ کنید.

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

7
2 5 2 7 1 6 4
Plain text

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

7 1 6 2 5 2 4
Plain text

بارکد - Python/JS


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

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

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

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

111###111
101###101
111###111
#########
#########
#########
111###111
101###101
111###111
Plain text

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

حال یک بارکد به شما داده شده است؛ اگر رنگ یک خانه معلوم نبود آن را با عدد دو نشان می‌دهیم.

شما باید به امیر بگویید که این بارکد چند حالت مختلف می‌تواند داشته باشد؛ توجه کنید که بارکد امیر ممکن است در هیچ حالتی درست نباشد و در آن صورت جواب صفر است (بارکد در صورتی نامعتبر است که یکی از مربع‌های سه در سه گوشه نتوانند به شکل گفته شده باشند).

ورودی🔗

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

خروجی🔗

در تنها خط خروجی تعداد بارکدهای ممکن را چاپ کنید.

مثال🔗

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

111011111
101011101
111011111
111000100
111110011
011010001
111010111
101212101
111002111
Plain text

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

8
Plain text

در این نمونه هر یک از خانه‌های ۲، دو حالت می‌توانند داشته باشند، پس جواب برابر با 23=82^3 = 8 است.

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

121101111
101011101
111011111
110110011
122210101
111100111
111010111
101110101
111000111
Plain text

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

8
Plain text

در این نمونه ۴ تا دو داریم که ۲ موجود در سطر اول، باید حتما سیاه شود. بنابر این جواب برابر با 23=82^3 = 8 است.

نقطه‌بازی - Java/PHP


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

نقطه‌بازی یک بازی قدیمی است. این بازی معمولا بین دو بازیکن در یک صفحه N×MN \times M که شامل NN ردیف است که در هر ردیف MM نقطه است، انجام می‌شود. ردیف‌ها را از بالا به پایین با ۱ تا nn و ستون‌ها را از چپ به راست با ۱ تا mm نامگذاری می‌کنیم.

بازی به این صورت است که هر کس در نوبت خود بین دو نقطه‌ی مجاور که قبلا بین آنها پاره‌خطی کشیده نشده است ، پاره‌خطی می‌کشد. هر گاه حرکت کسی منجر به ساخت تعدادی مربع 1×11 \times 1 شود، به تعداد مربع‌ها امتیاز می‌گیرد و همچنین حرکت بعدی را نیز باید خودش انجام دهد. بازی وقتی تمام می‌شود که نشود پاره‌خطی کشید.

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

ما از شما می‌خواهیم به ناصر کمک کنید و برنامه‌ای بنویسید تا صرفا با گرفتن حرکات، نتیجه نهایی را برای ما محاسبه کند.

برای فهم بیشتر، شکلی که برای ورودی نمونه دوم کشیده شده را نگاه کنید.

ورودی🔗

در خط اول nn و mm که ابعاد صفحه هستند داده می‌شود. در 2×n×mnm 2\times n \times m - n - m خط بعدی در هر خط چهار عدد مانند (x1,y1,x2,y2)(x_{1} , y_{1} , x_{2} , y_{2}) به شما داده می‌شود که به معنای این است که نقطه‌ی سطر x1x_{1} و ستون y1y_{1} به نقطه سطر x2x_{2} و ستون y2y_{2} با یک پاره‌خط متصل شد. همچنین تضمین می‌شود که ناصر و یاسر تنها حرکات مجاز انجام می‌دهند.(یعنی همواره پاره‌خط بین دو نقطه‌ی مجاور است که تا به حال بین آنها خطی کشیده نشده است.)

همچنین داریم: 2n,m200 2 \le n , m \le 200 1x1,x2n 1 \le x_{1} , x_{2} \le n 1y1,y2m 1 \le y_{1} , y_{2} \le m

خروجی🔗

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

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

2 2
1 1 1 2
1 2 2 2
2 2 2 1
2 1 1 1
Plain text

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

0 1
Plain text

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

2 3
1 1 2 1
1 2 2 2
1 2 1 3
1 1 1 2
2 1 2 2
2 2 2 3
1 3 2 3
Plain text

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

1 1
Plain text

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

محاسبه - Go/Ruby


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

در هر دور از مسابقه LIFFCode، چهار شرکت‌کننده با هم مسابقه می‌دهند و حق استفاده از سه زبان انتخاب شده را دارند. مهارت شرکت‌کننده iiام در زبان jjام، aija_{ij} است.

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

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

ورودی🔗

ورودی شامل ۴ خط است که خط iiام ورودی شامل ۳ عدد طبیعی است که نشانگر مهارت شرکت‌کننده iiام در سه زبان برنامه نویسی مختلف است.

تمام اعداد ورودی متمایز و کوچکتر مساوی ۱۰۰ هستند.

خروجی🔗

در تنها خط خروجی باید شماره شرکت‌کننده برنده را چاپ کنید.

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

1 4 15
3 5 8
9 7 2
12 13 14
Plain text

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

1
Plain text

شرکت‌کننده اول از زبان سومش با مهارت ۱۵، شرکت‌کننده دوم هم از زبان سومش با مهارت ۸، شرکت‌کننده سوم از زبان اولش با مهارت ۹ و شرکت‌کننده چهارم از زبان سومش با مهارت ۱۴ استفاده می‌کند.و در نهایت چون مهارت شرکت‌کننده اول بیشتر بوده، او برنده می‌شود.

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

90 92 91
80 93 81
99 10 11
51 98 97
Plain text

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

3
Plain text

رشته موردعلاقه - C++/Perl


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

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

حال جواد از شما می‌خواهد تا تعداد رشته‌هایی را که احمد دوست دارد را به دست بیاورد.

تعریف می‌کنیم رشته TT زیردنباله رشته SS است؛ اگر و تنها اگر با حذف تعدادی از کاراکترهای SS (این تعداد می‌تواند صفر باشد)، بتوان آن را به رشته TT تبدیل کرد.

ورودی🔗

در خط اول ورودی رشته ss داده میشود. در خط دوم ورودی عددطبیعی nn داده می‌شود. در هریک از nn خط بعدی یکی از رشته‌هایی که جواد آماده کرده است ورودی داده می‌شود. 1n1001 \le n \le 100 اندازه همه‌ی رشته‌های ورودی حداکثر ۱۰۰ است.

خروجی🔗

در تنها خط خروجی تعداد رشته‌هایی که احمد دوست دارد را چاپ کنید.

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

cod
4
coding
crocodile
doc
acetaminofencodeina
Plain text

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

3
Plain text

احمد کلمات اول و دوم و چهارم را دوست دارد.

معادله‌های پیچیده - Python/Node.js


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

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

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

شما با دریافت معادله درجه یک،‌ باید آن‌را حل کنید و در صورتی که پس از ساده‌سازی، ضریب xx برابر با صفر شد، عبارت invalid را چاپ کنید در غیر اینصورت اگر پاسخ شما برابر pq\frac{p}{q} باشد، باید عبارت p q را بنویسید به طوری که pp و qq نسبت به هم اول باشند و همچنین qq عددی طبیعی باشد.

برای اطلاع بیشتر از نحوه دادن معادله بخش ورودی و مثال‌ها را بخوانید.

ورودی🔗

در خط اول ورودی ابتدا عدد nn می‌آید که بیانگر تعداد کاراکترهای رشته معادله می‌باشد.

در خط دوم یک رشته شامل nn کاراکتر می‌آید که بیانگر یک معادله درجه یک برحسب xx می‌باشد. موارد زیر نیز رعایت شده‌اند:

  • در صورتی که ضریب xx، ۱ و یا ۱- باشد، ضریب ۱ نمایش داده نمی‌شود.
  • در رشته ورودی هیچ فاصله‌ای وجود ندارد.
  • رشته ورودی شامل دقیقا یک کاراکتر == می‌باشد.
  • حداقل یک xx در ورودی وجود دارد و ضریب هیچ xx‌ای صفر نمی‌باشد.
  • رشته با علامت ++ شروع نمی‌شود و درصورتی که ضریب یا عدد بلافاصله بعد از علامت == مثبت باشد، علامت ++ نمایش داده نمی‌شود.
  • در رشته عبارات ++++ و -- و ++- و +-+ وجود ندارند.

همچنین ضریب xx و تمامی اعداد در بازه [109,109][-10^9, 10^9] می‌باشند.

3n10003 \le n \le 1000

خروجی🔗

در تنها خط خروجی، در صورتی که ضریب xx پس از ساده‌سازی برابر با صفر بود، عبارت invalid را چاپ کنید در غیراینصورت پاسخ را به صورت p q چاپ کنید به طوری pp و qq نسبت به هم اول باشند و همچنین qq عددی طبیعی باشد.

مثال🔗

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

7
3x+5=-4
Plain text

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

-3 1
Plain text

پس از ساده سازی به کسر 93\frac{-9}{3} می‌رسیم اما 9-9 و 33 نسبت به هم اول نیستند، پس عبارت -3 1 را چاپ می‌کنیم.

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

9
5x=4x+x+0
Plain text

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

invalid
Plain text

پس از ساده‌سازی، ضریب xx صفر می‌شود پس عبارت invalid را چاپ می‌کنیم.

هوش موسیقیایی - #PHP/C


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

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

دو نوع داده جهت سیستم پیشنهاد موسیقی قابل استفاده است:

  1. داده‌های مربوط به هر کاربر. این داده‌ها شامل نام کاربری، سن، شهر و لیست نام آلبوم‌هاییست که این کاربر خریداری کرده است.
  2. داده‌های مربوط به هر آلبوم. این‌داده‌ها شامل نام آلبوم، نام خواننده، سبک و تعداد ترک‌های موسیقی این آلبوم هستند.

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

  1. درخواست تعداد آهنگ‌هایی که یک کاربر از یک خواننده خریده‌است.
  2. درخواست تعداد آهنگ‌هایی که یک کاربر از یک سبک خریده‌است.
  3. درخواست تعداد آهنگ‌هایی که کاربرهای با یک سن خاص، از یک خواننده خریده‌اند.
  4. درخواست تعداد آهنگ‌هایی که کاربرهای با یک سن خاص، از یک سبک خریده‌اند.
  5. درخواست تعداد آهنگ‌هایی که کاربرهای با یک شهر خاص، از یک خواننده خریده‌اند.
  6. درخواست تعداد آهنگ‌هایی که کاربرهای با یک شهر خاص، از یک سبک خریده‌اند.

البته این سیستم خیلی هم باهوش نیست و ممکن است در سوال‌هایی که می‌پرسد نام کاربری، یا نام خواننده و یا هریک از فیلدهای مسئله اشتباه باشد و واقعاً در بین داده‌های سایت موجود نباشد.

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

برای آشنایی با فرمت Yaml می‌توانید به مثال‌های سوال (و البته اینترنت!) مراجعه کنید. دقت کنید که ورودی‌های این سوال حالت خاص و بسیار ساده‌ای از Yaml می‌باشد.

ورودی🔗

در خط اول ورودی عدد nn‌ آمده‌است که نمایانگر تعداد داده‌های از نوع کاربر است. سپس این nn داده بصورت Yaml می‌آیند.

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

در این Yamlها، فیلدهای نام کاربری، سن، شهر و لیست آلبوم‌ها برای هر کاربر به همین ترتیب می‌آیند و با کلیدهای زیر مشخص می‌شوند:

  • name
  • age
  • city
  • albums

همچنین فیلدهای نام آلبوم، نام خواننده، سبک و تعداد ترک‌های یک آلبوم به همین ترتیب می‌آیند و با کلیدهای زیر مشخص می‌شوند:

  • name
  • singer
  • genre
  • tracks

در فیلدهای age و tracks حتماً یک عدد بین ۱ تا ۳۰ می‌آید و در دیگر فیلدها رشته‌های متشکل از حداکثر ۱۰ کاراکتر از حروف کوچک انگلیسی می‌آید.

و فرمت اعداد و رشته‌ها و فواصل، دقیقاً به شکل ورودی‌های نمونه خواهد بود. هر تب نیز با ۲ تا فاصله (space) مشخص می‌شود.

سپس در خط بعدی عدد qq آمده‌ است که نمایانگر تعداد درخواست‌هایی است که برنامه شما باید به آن‌ها پاسخ دهد. سپس در هریک از qq سطر بعدی، ابتدا شماره نوع درخواست و سپس توضیح آن می‌آید که به یکی از ۶ شکل زیر است:

  • 1 user singer
  • 2 user genre
  • 3 age singer
  • 4 age genre
  • 5 city singer
  • 6 city genre

دقت کنید که ممکن است هریک از اطلاعات داخل پرسش‌ها (از قبیل نام کاربر، نام خواننده، ...) در ورودی موجود نباشد.

1n,m,q1001 \le n, m, q \le 100

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

تضمین می‌شود که آلبوم‌ها و کاربرهای مختلف، نام‌های مختلف دارند. همچنین هیچیک از کلیدهای توضیحی (مانند name و albums و ...) بعنوان نام کاربر، آلبوم، خواننده، سبک و یا شهر در ورودی نمی‌آیند.

خروجی🔗

به ازای هر درخواست، برنامه‌ی شما باید یک عدد خروجی دهد که برابر با پاسخ آن درخواست است.

مثال🔗

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

1
- name: ali
  age: 12
  city: bushehr
  albums:
    - bidad
    - blaze
2
- name: bidad
  singer: shajarian
  genre: classic
  tracks: 10
- name: blaze
  singer: ghorbani
  genre: pop
  tracks: 9
1
1 ali ghorbani
Plain text

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

9
Plain text

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

2
- name: gholi
  age: 18
  city: tehran
  albums:
    - tekunbede
    - barf
    - hoyad
- name: mehdi
  age: 20
  city: mashhad
  albums:
    - eclipse
    - barf
    - hoyad
4
- name: eclipse
  singer: malmsteen
  genre: classic
  tracks: 10
- name: barf
  singer: beeptunes
  genre: pop
  tracks: 22
- name: tekunbede
  singer: beeptunes
  genre: pop
  tracks: 14
- name: hoyad
  singer: hoyad
  genre: persian
  tracks: 5
12
1 gholi hoyad
1 gholi beeptunes
2 gholi rock
2 mehdi pop
3 20 beeptunes
4 18 malmsteen
4 19 malmsteen
5 tehran malmsteen
5 mashhad malmsteen
6 tehran pop
6 ghazvin rock
1 mehdi shajarian
Plain text

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

5
36
0
22
22
0
0
0
10
36
0
0
Plain text

چرت - Haskell/C


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

امیر از خواب بیدار شده اما هنوز کمی خسته است. او TT دقیقه دیگر فرصت استراحت دارد و چون خسته است تصمیم می‌گیرد کمی چرت بزند.

هر چرت دارای دو مشخصه tit_i و eie_i است که به ترتیب مدت زمان چرت و مقدار انرژی دریافتی از چرت را مشخص می‌کند؛ توجه کنید که ممکن است او بعد از یک چرت خسته‌تر باشد یا به عبارت دیگر، eie_i صفر و یا حتی منفی باشد!

هم‌چنین امیر به ازای هر دقیقه از TT دقیقه که چرت نمی‌زند، یک واحد از انرژی‌اش کم می‌شود و در زمان صفر هم، صفر واحد انرژی دارد.

امیر می‌خواهد یک ii انتخاب کند و به ترتیب چرت‌های 11 تا ii را بزند بطوری که در دقیقه‌ی TT همه‌ی چرت‌هایش تمام شده باشد و بیدار باشد؛ حال شما به او بگویید که با این شرایط در زمان TT، حداکثر چقدر انرژی می‌تواند داشته باشد.

توجه کنید که ii می‌تواند صفر باشد و به ازای ii انتخابی جمع چرت‌ها باید کم‌تر مساوی TT باشد.

ورودی🔗

خط اول ورودی شامل دو عدد nn و TT است. سپس در nn خط دیگر ورودی، در هر خط به ترتیب دو عدد tit_i و eie_i می‌آیند.

1n1051 \le n \le 10^5 1T1091 \le T \le 10^9 1ti1041 \le t_i \le 10^4 104ei104-10^4 \le e_i \le 10^4

خروجی🔗

بیشینه انرژی امیر را در زمان TT چاپ کنید. توجه کنید که این عدد ممکن است منفی باشد.

مثال🔗

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

3 5
1 1
2 3
1 -2
Plain text

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

2
Plain text

در این مثال امیر، ii را ۲ انتخاب می‌کند و چرت‌های ۱ و ۲ را می‌زند؛ بنابراین بعد از ۳ دقیقه (که هر دو چرتش تمام شده)، ۴ واحد انرژی دارد؛ سپس دو دقیقه چرت نمی‌زند و ۲ واحد انرژی‌اش کم می‌شود؛ بنابراین در نهایت ۲ واحد انرژی دارد.

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

2 10
5 -3
4 -3
Plain text

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

-7
Plain text

در این مثال هم i=2i = 2 بهترین حالت است و پس از این که امیرمحمد ۹ دقیقه چرت می‌زند ۶- واحد انرژی دارد و پس از یک دقیقه انرژی‌اش ۷- می‌شود.

مسابقه آشپزی - Ruby/JS


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

امیر که حوصله‌اش سر رفته یک مسابقه آشپزی را تماشا می‌کند؛ در این مسابقه 10610^6 نفر از آشپزان سرتاسر کشور شرکت‌ کرده‌اند و nn داور مسابقه به آن‌ها رای می‌دهند تا برنده مسابقه مشخص شود.

شیوه رای‌دهی داوران به این صورت است که هر داور حداکثر می‌تواند سه نفر را انتخاب کند و به انتخاب اول، دوم و سومش به ترتیب ۳، ۲ و ۱ امتیاز بدهد. توجه کنید که هر داور می‌تواند یک یا دو انتخاب داشته باشد و در این صورت به رای یک امتیازی و یا دو امتیازی خود را از دست می‌دهد.

حال همه داوران امتیازهای خود را داده‌اند و امیر منتظر است تا برنده نهایی مشخص شود؛ ولی چون خیلی استرس دارد نتیجه رای‌گیری را به شما می‌دهد و از شما می‌خواهد تا برنده(ها)ی مسابقه را مشخص کنید.

توجه کنید که برنده مسابقه آشپزی کسی است که مجموع امتیازی که گرفته از هیچ آشپزی کم‌تر نباشد؛ بنابراین ممکن است مسابقه چند برنده داشته باشد و در این صورت شما باید همه برنده‌ها را چاپ کنید.

ورودی🔗

ورودی شامل تعدادی تست است (سوال تنها یک تست دارد که همه تست‌ها در آن جمع شده‌اند).

در خط اول هر ورودی عدد nn آمده که تعداد داور‌ها است. سپس در nn خط بعدی، ابتدا یک عدد did_i می‌آید که نشان‌دهنده تعداد انتخاب‌های داور iiام است؛ پس از آن did_i عدد می‌آید که به ترتیب نشان‌دهنده انتخاب‌های این داور بر حسب اولویت است.

ورودی‌ها زمانی تمام می‌شوند که عدد ۰، به عنوان nn وارد شود.

1n2001 \le n \le 200 1di3 1 \le d_i \le 3

اعداد نمایشگر آشپزها کم‌تر مساوی 10610^6 هستند.

خروجی🔗

به ازای هر تست، یک خط چاپ کنید که شماره آشپزهای برنده در آن تست به صورت صعودی آمده باشد.

مثال🔗

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

4
3 5 2 1
3 12 5 2
2 1 2
3 2 1 5
2
3 3 2 1
3 2 3 1
0
Plain text

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

2
2 3
Plain text

جوراب‌ها - Perl/Swift


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

رادزینکا بچه‌ای شلخته و نامنظم است که اتاقش شبیه شهر ارواح است!

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

از آن‌جایی که جوراب‌های رادزینکا ورزشی است، بر روی هر لنگه یک عدد نوشته شده است.جوراب‌ها به ترتیب با شماره‌های ۱ تا nn شماره‌گذاری شده‌اند.

مادر رادزینکا دوست دارد به نحوی جوراب‌ها را جفت کند که چهار شرط زیر (به همین ترتیب اولویت) رعایت شود:

  • دو لنگه‌ای که با هم جفت می‌شوند، رنگ یکسانی داشته باشند.
  • تعداد جوراب‌های جفت شده بیشینه شود تا کمترین تعداد جوراب دور ریخته شود.
  • اگر قرار است kk جفت انتخاب کند، آن‌ kk جفت را به گونه‌ای انتخاب کند که جمع اعداد موجود بر روی جوراب‌ها کمینه شود (مادر رادزینکا از اعداد بزرگ خوشش نمی‌آید).
  • در جفت کردن ایده‌آل مادر رادزینکا، با رعایت کامل سه شرط بالا، تلاش می‌شود شماره جوراب‌های جفت شده تا حد امکان به هم نزدیک‌تر باشند. به عبارت دیگر، مجموع اختلاف اعداد جوراب‌های جفت شده کمینه شود (رادزینکا از اختلاف زیاد اعداد جوراب‌هایش ناراحت می‌شود)

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

ورودی🔗

در خط اول ورودی عدد nn آمده است که نشان‌دهنده تعداد لنگه جوراب‌های موجود در اتاق رادزینکا است. در خط دوم nn عدد آمده است که ii امین عدد نشان‌دهنده رنگ‌ جورابی است که بر روی آن عدد ii نوشته شده است.

1n2001 \le n \le 200

رنگ جوراب‌ها عددی بین ۱ تا ۱۰۰ است.

خروجی🔗

در اولین خط خروجی عدد kk را خروجی دهید که نشان‌دهنده بیشینه تعداد جفت‌هاست.

در iiامین خط از kk خط بعدی به ترتیب دو عدد aa و bb را خروجی دهید که نشان‌دهنده اعداد جوراب‌هایی است که مادر رادزینکا در مرحله iiام جفت می‌کند. دقت کنید که aa کوچکتر از bb باشد.

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

مثال🔗

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

5
1 2 1 2 3
Plain text

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

2
1 3
2 4
Plain text

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

8
1 4 1 1 4 1 4 1
Plain text

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

3
1 3
2 5
4 6
Plain text

دیتابیس - C++/Java


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

با بوجود آمدن زبان‌های برنامه‌نویسی متنوع بسیار با نام‌های غیر قابل توصیف، "حاج اصغر" نیز تصمیم گرفت برای خود زبانی طراحی کند و آن را "ذله" (یا Zelle) نامید.

او نحوه‌ی برنامه‌نویسی با زبانش را به جهانیان ارائه کرد تا همه بتوانند از زبان زیبایش استفاده کنند.

هر برنامه به زبان "ذله" به شکل زیر است:

  • یک برنامه شامل تعدادی "محدوده" یا "scope" است. در ابتدای هر scope یک سطر که شامل آکولاد باز (یا {) می‌شود آمده‌است و در انتهای آن یک سطر که شامل آکولاد بسته (یا }) می‌شود آمده‌است. یک محدوده می‌تواند شامل تعدادی محدوده شود؛ به این صورت که کل محدوده‌ی داخلی بین شروع و پایان محدوده‌ی خارجی قرار داشته باشد. برای مثال، برنامه‌ی زیر ۳ محدوده دارد که یکی شامل ۲ تای دیگر می‌شود:
{
{
}
{
}
}
Plain text
  • در هر محدوده تعدادی متغیر می‌توان تعریف کرد که در آن‌ها می‌توان یک مقدار عددی نگه‌داشت. هر متغیر بصورت زیر تعریف می‌شود:
set name = value ;
Plain text

که name برابر نام متغیر است و value یک عبارت است که نمایانگر مقدار اولیه‌ی در این متغیر است. برای مثال:

set a = 24 + 18 - 10 ;
Plain text

یک متغیر به‌نام a تعریف می‌کند و مقدار آن‌ را برابر ۳۲ قرار می‌دهد. نام یک متغیر باید رشته‌ای شامل تنها حروف کوچک انگلیسی باشد. همچنین نام یک متغیر نباید برابر set یا print باشد.

اگر متغیر در محدوده‌ای تعریف شود، تنها در آن محدوده و تنها در سطر‌های بعد از تعریفش قابل استفاده است. (دقت کنید که اگر محدوده‌ای باشد که این محدوده شاملش شود و پس از تعریف این متغیر شروع شده باشد، این متغیر در آن محدوده نیز تعریف شده‌است. همچنین دقت کنید که وقتی محدوده‌ای که متغیر در آن تعریف‌شده است تمام شود، متغیر در سطر‌های بعدی آن تعریف شده نیست.)

می‌توان مقدار یک متغیر را پس از تعریف آن بصورت زیر تغییر داد:

name = value ;
Plain text

که name نام متغیری است که باید تغییر کند و value عبارتی‌است که حاصلش مقدار جدید این متغیر است. برای مثال:

set a = 2 ;
set b = 5 ;
a = a - b ;
Plain text

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

برای مثال، برنامه‌ی زیر درست نیست:

{
    set a = 5 ;
    set a = 6 ;
}
Plain text

اما برنامه‌ی زیر درست است:

{
    set a = 5 ;
    {
        set a = 6 ;
    }
}
Plain text
  • دستور print نیز یک عبارت را در خروجی برنامه می‌نویسد. نحوه‌ی کار با این دستور به شکل زیر است:
print value ;
Plain text

که value عبارتی‌است که حاصلش باید در یک سطر از خروجی نوشته شود. برای مثال:

print a + b - c ;
Plain text
  • هر برنامه باید یک scope اصلی داشته باشد که بقیه برنامه درون آن قرار بگیرد و قبل و بعد از این scope هم دستور یا scope دیگری وجود نداشته باشد.
  • یک عبارت در زبان "ذله" شامل تعدادی عدد/متغیر است که بینشان عملگر جمع یا تفریق به صورت + یا - ، همراه با فاصله آمده است. اعداد داخل یک عبارت همه صحیح و مثبت هستند.
  • در پایان هر خط دستوری یک کاراکتر ; با فاصله می‌آید.

همچنین نباید در عبارت هنگام تعریف یک متغیر از آن و یا متغیری هم‌نام با آن استفاده کرد.

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

ورودی🔗

ورودی از تعدادی خط تشکیل شده است که برنامه را می‌سازند. می‌توانید فرض کنید برنامه ورودی حداکثر از ۱۰۰ خط تشکیل شده که هر خط شامل یک دستور، آکولاد باز و یا آکولاد بسته است. همچنین ممکن است برای خواناتر شدن در برنامه از کاراکتر های فاصله (space یا tab) اضافه استفاده شده باشد و یا سطری خالی از دستور در برنامه باشد.

همچنین می‌توانید فرض کنید در عبارت های داخل برنامه از حداکثر ۱۰ عدد/متغیر استفاده شده است و در طول اجرای برنامه مقدار قدر مطلق هیچ متغیری بیشتر از 10610^6 نمی‌شود. حداکثر طول نام متغیر ها ۱۰ کاراکتر است.

خروجی🔗

اگر در برنامه ورودی قواعد زبان برنامه نویسی ذله رعایت نشده بود باید عبارت "Zelle Error" در یک خط چاپ شود و اگرنه مقدار های مربوط به دستور های print باید به ترتیب در خط های جداگانه چاپ شوند.

مثال🔗

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

{
    set a = 3 ;
    {
        print a ;     
        set b = a + a + a ;    
        print b - 5 ;
    }
}
Plain text

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

3
4
Plain text

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

{
    set a = 3 ;
    {
        print a ;     
        set b = a + a + a ;    
    }
    print b - 5 ;
}
Plain text

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

Zelle Error
Plain text

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

{
    set a = 3 ;
    set b = 5 ;
    print a ;
    print b ;
    a = a + b ;
    b = a - b ;
    a = a - b ;
    print a ;
    print b ;
}
Plain text

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

3
5
5
3
Plain text