آلفا قنطورس - C / JS


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

در یکی از سیارات منظومه آلفا قنطورس (Alpha Centauri - نزدیک‌ترین منظومه ستاره‌ای به منظومه شمسی)، موجودات عجیب و غریبی زندگی می‌کنند و هرکدام از آن‌ها تعداد انگشتان دستش با بقیه فرق دارد. بعضی از آن‌ها مانند ما ده انگشت در دو دست خود دارند و بعضی دیگر، ۱۶ انگشت، بعضی ۲ انگشت، بعضی ۶ انگشت و... به همین علت در این سیاره مدارس مختلفی برای موجودات مختلف وجود دارد و در هر مدرسه، اعداد با مبنای متفاوتی به بچه‌ها آموزش داده می‌شوند.

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

ورودی🔗

ورودی شامل دو عدد nn و bb است که دز يك خط به شما داده شده است. nn عدد مدنظر در مبنای ۱۰ و bb مبنای خواسته شده است.

0n23110 \leq n \leq 2^{31}-1 2b162 \leq b \leq 16

خروجی🔗

در خروجی باید عدد nn را در مبنای bb چاپ کنید. توجه کنید که برای مبنای بزرگ‌تر از ۱۰، برای نمایش رقم‌هایی نظیر ۱۰، ۱۱ و... از حروف انگلیسی B،A و... استفاده می‌شود. توجه کنید که این حروف در خروجی شما حتماً با حرف بزرگ نوشته شوند.

مثال🔗

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

127 16
Plain text

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

7F
Plain text

F=1515×160+7×161=127F=15 \rightarrow 15 \times 16 ^ 0 + 7 \times 16^1 = 127

عدد خوب - Python / Ruby


  • محدودیت زمان: ۲ ثانیه

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


یکی از اساتید دانشکده ریاضی که به پروژه Genealogy Mathematics خیلی علاقه‌مند است، بعد از مطالعه پیشینه اساتید خود و استادان آن‌ها و... که در دیتابیس بزرگ این پروژه قرار دارند، در نهایت به ریاضی‌دان بزرگ کارل فریدریش گاوس به عنوان جد ریاضیاتی خود رسید که علاوه بر کارهای بسیار بزرگ در ریاضیات، داستان‌هایی در مورد محاسبه جمع اعداد ۱ تا ۱۰۰ با استفاده از فرمول را نیز به دوران مدرسه او نسبت می‌دهند. به این ترتیب این استاد دانشکده ریاضی، به اعدادی که از جمع اعداد ۱ تا nn ساخته شده‌اند (مانند ۱، ۳، ۶، ۱۰، ۱۵ و...)، علاقه‌مند شد.

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

ورودی🔗

ورودی شامل یک عدد طبیعی kk تعداد مقسوم‌علیه‌های عدد خوب مدنظر است. 1k3001 \leq k \leq 300

خروجی🔗

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

مثال🔗

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

4
Plain text

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

6
Plain text

توضیح🔗

اولین عدد خوبی که چهار مقسوم‌علیه طبیعی دارد، عدد ۶ است.

کاشی‌های نمکستان - Go / Node.js


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

قلی که از برنامه‌نویس شدنش ناامید شده است، تصمیم گرفته مشغول به کاشی‌کاری ساختمان شود! قلی اهل نمکستان است و در نمکستان، تمام کاشی‌ها به شکل مربع و با ابعاد 2k×2k{\text{2}}^{k} \times {\text{2}}^{k} هستند. او باید قبل از شروع کار خود، کاشی های مورد نیازش را خریداری کند ولی همیشه در این کار دچار اشتباه می‌شود. به همین دلیل تصمیم گرفت برنامه‌ای بنویسد که این محاسبات را برای او انجام دهد. اما از آنجایی که در برنامه‌نویسی به جایی نرسیده بود، نتوانسته است این مسئله را حل کند.

برنامه‌ای بنویسید که با استفاده از آن، قلی بتواند تعداد کاشی‌هایی که از هر اندازه، برای اتاقی با ابعاد m×nm \times n نیاز است را پیدا کند؛ بطوری‌که کمترین تعداد کاشی ممکن استفاده شود.

توجه کنید که کاشی‌ها نباید از اتاق بیرون بزنند.

ورودی🔗

در تنها خط ورودی، به ترتیب mm و nn داده می‌شود. 1m,n10181 \leq m, n \leq 10^{18}

خروجی🔗

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

مثال🔗

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

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

6 4
Plain text

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

1 4*4 tiles
2 2*2 tiles
Plain text

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

9 5
Plain text

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

2 4*4 tiles
13 1*1 tiles
Plain text

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

11 7
Plain text

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

2 4*4 tiles
7 2*2 tiles
17 1*1 tiles
Plain text

مصائب کامبیز - C# - PHP


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

کامبیز به تازگی وارد کسب و کار شریف فروش پروکسی شده است. او می‌خواهد اقدام به پخش آی‌پی پروکسی‌های خود کند. اما از آنجا که نمی‌خواهد کسی به او شک کند نقطه ها را ازآی‌پی‌ها پاک کرده است!

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

آی پی ورژن 44 یا IPv4IPv4 دارای فرمت X.X.X.XX.X.X.X است که در آن XX را octetoctet می نامیم که یک عدد صحیح بین 00 تا 255255 است.

ورودی🔗

در تنها خط ورودی یک رشته می‌آید، که نشان دهنده‌ی رشته ایست که به كامبيز گفته است. 4s204 \leq |s| \leq 20 0si90 \leq s_i \leq 9

خروجی🔗

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

مثال🔗

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

7151
Plain text

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

7.1.5.1
Plain text

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

55011859
Plain text

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

5.50.118.59
55.0.118.59
Plain text

نکته: آی پی هایی مانند 55.01.18.59 را که در آن ها قبل از اعداد رقم صفر آمده است، در نظر نگیرید.

نقاشی - ++Java / C


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

ممد و رضا یک بازی دونفره با هم انجام می‌دهند. ممد ‌nn نقطه روی صفحه می‌گذارد و از رضا می‌خواهد تعدادی از این نقطه هارا طوری بهم وصل کند که یک درخت دودویی کامل با ارتفاع kk شود. تنها شرط مسأله این است که یال های درخت نباید همدیگر را قطع کنند.

درخت دودویی، درختی است که هریک از راس‌های آن دقیقا دقیقا دو یاصفر فرزند دارند. درخت دودویی کامل با ارتفاع ‌kk درخت دودویی‌ای است که تا ارتفاع k1k-1 همه راس های آن دقیقا دو فرزند دارند و راس های ارتفاع kkام هیچ فرزندی ندارند. راس های درخت دودویی را از 1 تا 2k12^k-1 شماره گذاری می‌کنیم طوری که فرزندان راس iiام دو راس 2i2i و 2i+12i+1 باشند.

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

ورودی🔗

در اولین خط ورودی اعداد nn, kk آمده‌است. که به ترتیب تعداد نقطه‌ها و ارتفاع درخت است، داده می‌شود. در هرکدام از ‌nn خط بعدی، در هر سطر دو عدد صحیح xi,yix_i, y_i می‌آید که مختصات نقطه‌ iiام در صفحه را نشان می‌دهد. 3n1 5003 \le n \le 1\ 500 109xi,yi109{-10}^9 \le x_i, y_i \le 10^9 12k1n1 \le 2^k-1 \le n

خروجی🔗

در ‌nn سطر خروجی و در سطر iiام شماره راسی را چاپ کنید که به نقطه iiام (به ترتیبی که در ورودی داده شده است) نسبت داده‌ایم و اگر هم این نقطه در بین راس های درختتان نیست، عدد ۰ را برایش چاپ نمایید. اگر با نقطه های موجود نمی‌توان هیچ درخت دودویی را کشید که یال هایش همدیگر را قطع نکنند، تنها در یک سطر عدد ۱- را چاپ کنید. دقت نمایید که جواب‌ها لزوما یکتا نیستند.

مثال🔗

ورودی نمونه🔗

9 2
100 300
200 300
500 301
200 200
300 201
400 203
500 206
300 101
402 100
Plain text

خروجی نمونه🔗

4
1
0
2
0
3
6
5
7
Plain text

نقاشی زیبای ممد برای این مثال برای فهم بهتر رضا از بازی :

کلاس کد! - C++ / Perl


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

پویا یک برنامه نوشته که اعداد یک تا پنج هزار را در خطوط مختلف چاپ می‌کند، البته متاسفانه کاراکتر \n لپ‌تاپ‌ش دچار مشکل شده و وقتی برنامه را اجرا کرد دید که برنامه تمامی اعداد ۱ تا nn را به ترتیب در یک خط چاپ کرده و در واقع یک عدد بسیار بزرگ تولید شده است (یعنی در خروجی عدد بسیار بزرگ ...۱۲۳۴۵۶۷۸۹۱۰۱۱۱۲۱۳ چاپ شده بود).

حال برای او سوال شده که kkامین رقم سمت چپ این عدد بسیار بزرگ چیست؟ به او کمک کنید تا جواب را پیدا کند.

ورودی🔗

در خط اول ورودی عدد kk داده می‌شود. 1k40001 \leq k \leq 4000

خروجی🔗

در خروجی رقم kkام از چپ چاپ می‌شود.

مثال🔗

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

5
Plain text

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

5
Plain text

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

10
Plain text

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

1
Plain text

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

11
Plain text

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

0
Plain text

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

29
Plain text

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

9
Plain text

باغچه رز - Node.js / Swift


  • محدودیت زمان: ۱ ثانیه

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


ولد یک ردیف رز دارد که هر کدام از آن‌ها آخر هر ماه پژمرده شده و دوباره گل می‌دهد و هر بار که دوباره می‌روید می‌تواند سفید یا سیاه باشد. ولد که گل‌های خود را خوب می‌شناسد می‌داند که اگر بعد از پایان دوره (منظور از دوره تعدادی ماه پشت سر هم است)، تعداد بارهایی که گل سفید داده است زوج باشد، آن رز بی‌برکت است و باید آن را چید. برای مثال اگر ولد ۲ گل داشته باشد و بخواهد به مدت ۳ ماه آن‌ها را در نظر بگیرد و وضعیت زیر پیش بیاید:

توضیح تصویر

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

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

ورودی🔗

در خط اول به شما به ترتیب nn تعداد گل‌های ولد و سپس mm تعداد ماه‌های دوره داده می‌شود.

در iiامین خط از mm خط بعدی، یک رشته به طول nn متشکل از ‌B و W داده می‌شود که jjامین عنصر آن برابر با مقدار خانه واقع در تقاطع سطر iiام و ستون jjام می‌باشد. W به معنای سفید و B به معنای سیاه است. 1n,m201 \leq n, m \leq 20

خروجی🔗

در خروجی از شما خواسته شده که یک ردیف nn تایی از کاراکترها چاپ کنید. به ازای هر گلی که زوج بار سفید بوده کاراکتر B و به ازای بقیه آن‌ها کاراکتر F را چاپ کنید.

مثال🔗

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

3 2
WBW
BBW
Plain text

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

FBB
Plain text

سماق‌فارم - C# / JS


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

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

a1a2...ai>...>ana_1 \leq a_2 \leq ... \leq a_i > ... > a_n

a1a2...ai<...<ana_1 \geq a_2 \geq ... \geq a_i < ... < a_n

توجه کنید که ii می‌تواند برابر با nn باشد.

ورودی🔗

در خط اول ورودی عدد nn داده می‌شود و در خط دوم a1,...,ana_1, ... ,a_n داده می‌شود.

1n201 \leq n \leq 20

200ai200-200 \leq a_i \leq 200

خروجی🔗

در تنها خط خروجی شما باید بسته به این‌که این مزرعه می‌تواند مزرعه سماق باشد یا نه ، Yes یا No را چاپ کنید.

مثال🔗

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

5
1 2 4 3 1
Plain text

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

Yes
Plain text

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

4
1 2 3 4
Plain text

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

Yes
Plain text

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

8
1 9 8 7 5 3 2 4
Plain text

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

No
Plain text

گراف کشی - Go / PHP


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

ویتی برای تحلیل اطلاعات مربوط به یکی از پروژه هایش نیاز دارد گراف زیر را بکشد: گراف ما از nn راس تشکیل شده است. روی هر یک از این راس ها یک عدد aia_i که یک عدد حسابی کوچکتر مساوی ۱۰۰۰۰۰ است نوشته شده است. دو راس vv و uu به هم وصل اند اگر و تنها اگر اختلاف aua_uو ava_v دقیقا برابر ۱ باشد. با گرفتن اعداد روی راس ها به ویتی کمک کنید تا بفهمد برای کشیدن گرافش به چند یال نیاز دارد.

ورودی🔗

در خط اول عدد nn داده میشود که nn تعداد راس هاست. در خط بعدی n عدد داده میشود که iiامی آنها عدد روی راس ii را نشان می دهد. 1n50 0001 \le n \le 50\ 000 1ai100 0001 \le a_i \le 100\ 000

خروجی🔗

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

مثال🔗

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

3
1 2 1 
Plain text

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

2
Plain text

بین راس شماره ۱ و ۲ و همچنین بین راس شماره ی ۲ و ۳ یال وجود دارد چون اختلاف عدد های روی آن ها (۱ و ۲) برابر ۱ است.

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

12
1 2 4 5 4 5 5 6 7 7 7 7
Plain text

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

14
Plain text

ایزی لیگ - Python / Java


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

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

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

ساختن بازیکن جدید🔗

new player name price speed finishing defence
Plain text

این دستور، بازیکنی با نام name، قیمت price، سرعت speed، قدرت تمام‌کنندگی finishing و دفاع defence می‌سازد.

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

هر بازیکن، یک شناسه‌ی عددی دارد که با استفاده از آن می‌توان به آن بازیکن دسترسی داشت، اولین بازیکنی که ساخته می‌شود شناسه‌ی عددی ۱، دومین بازیکنی که ساخته می‌شود شناسه‌ی عددی ۲ و ii-امین بازیکنی که ساخته می‌شود شناسه‌ی عددی ii دارد.

ساختن تیم جدید🔗

new team name money
Plain text

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

همچنین name از جنس رشته و money از جنس عدد می‌باشد.

هر تیم، یک شناسه‌ی عددی دارد که با استفاده از آن می‌توان به آن تیم دسترسی داشت، اولین تیمی که ساخته می‌شود شناسه‌ی عددی ۱، دومین تیمی که ساخته می‌شود شناسه‌ی عددی ۲ و ii-امین تیمی که ساخته می‌شود شناسه‌ی عددی ii دارد.

خرید بازیکن توسط تیم🔗

buy playerID teamID
Plain text

با استفاده از این دستور، تیم با شناسه‌ی عددی teamID بازیکن با شناسه‌ی عددی playerID را می‌خرد.

همچنین همانطور که در بالا گفته شد، هر بازیکن یک قیمت (price) دارد و هر تیمی مقداری پول money دارد و هنگام خرید یک بازیکن باید تیم مورد نظر پول کافی را برای خرید بازیکن داشته باشد و در صورتی که خرید موفقیت آمیز باشد، از پول تیم، به میزان قیمت بازیکن مورد نظر کم می‌شود.

توجه کنید که در امر خرید بازیکن ممکن هست حالت‌های مختلفی پیش بیاید:

  • در صورتی که بازیکنی با شناسه‌ی عددی playerID وجود نداشته باشد، باید عبارت player with the id playerID doesnt exist را چاپ کنید.
  • در صورتی که تیمی با شناسه‌ی عددی teamID وجود نداشته باشد، باید عبارت team with the id teamID doesnt exist را چاپ کنید.
  • در صورتی که تیم مورد نظر، پول کافی برای خرید بازیکن را نداشته باشد باید عبارت the team cant afford to buy this player را چاپ کنید.
  • در صورتی که بازیکن مورد نظر، در تیمی عضو باشد، باید عبارت player already has a team را چاپ کنید.

در صورتی که هیچکدام از حالت های بالا پیش نیایند، با موفقیت بازیکن مورد نظر خریداری می‌شود و باید عبارت player added to the team succesfully را چاپ کنید.

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

فروش بازیکن🔗

sell playerID teamID
Plain text

برای فروش بازیکن می‌توان از دستور بالا استفاده کرد. با استفاده از این دستور، تیم با شناسه‌ی عددی teamID بازیکن با شناسه‌ی عددی playerID را به فروش می‌رساند.

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

  • در صورتی که تیمی با شناسه‌ی عددی teamID وجود نداشته باشد، باید عبارت team doesnt exist را چاپ کنید.
  • در صورتی که تیم مورد نظر وجود داشته باشد اما بازیکنی با شناسه‌ی عددی playerID در آن تیم وجود نداشته باشد، باید عبارت team doesnt have this player را چاپ کنید.

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

انجام بازی بین دو تیم🔗

match teamID1 teamID2
Plain text

با استفاده از این دستور، دو تیم با شناسه‌های عددی teamID1 و teamID2 با یکدیگر بازی می‌کنند.

همچنین ممکن است در اجرای این دستور، حالت‌های مختلفی پیش بیاید:

  • اگر حداقل یکی از دو تیم وجود نداشته‌ باشد، باید عبارت team doesnt exist را چاپ کنید.
  • اگر دو تیم مورد نظر وجود داشتند، اما حداقل یکی از آن‌ها تعداد بازیکن‌هایش کمتر از ۱۱ نفر باشد، بازی انجام نمی‌شود و باید عبارت the game can not be held due to loss of the players را چاپ کنید.

در صورتی‌که هیچکدام از مشکلات بالا پیش نیاید، بازی با موفقیت انجام می‌شود.

در ابتدا برای توصیف روند بازی، نیاز به تعریف پارامتر قدرت برای هر تیم داریم.

قدرت تیم اول (تیم با شناسه‌ی عددی teamID1) برابر است با مجموع سرعت و تمام‌کنندگی ۱۱ بازیکن اول آن تیم.

همچنین قدرت تیم دوم (تیم با شناسه‌ی عددی teamID2) برابر است با مجموع سرعت و دفاع ۱۱ بازیکن اول آن تیم.

توجه کنید که ترتیب بازیکن‌ها در یک تیم، همان ترتیب زمانی اضافه شدن آن‌ها به تیم می‌باشد.

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

نمایش جدول تیم‌ها🔗

rank
Plain text

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

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

1. teamName[0]
2. teamName[1]
...
Plain text

که در آن teamName[0] تیم با رتبه‌ی ۱، teamName[1] تیم با رتبه‌ی ۲ و... می‌باشند.

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

پایان لیگ🔗

end
Plain text

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

ورودی🔗

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

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

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

خروجی🔗

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

مثال🔗

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

new player ArshiA 1 2 3 4
new player sadegh 1 2 3 4
new player haniye 1 2 3 4
new player fateme 1 2 3 4
new player qorban 1 2 3 4
new player abbasi 1 2 3 4
new player alikmr 1 2 3 4
new player sadegh 1 2 3 4
new player hamide 1 2 3 4
new player karane 1 2 3 4
new player vanaki 1 2 3 4

new player Ars 1 100 100 100
new player sad 1 100 100 100
new player han 1 100 100 100
new player fat 1 100 100 100
new player qor 1 100 100 100
new player abb 1 100 100 100
new player ali 1 100 100 100
new player sad 1 100 100 100
new player ham 1 100 100 100
new player kar 1 100 100 100
new player van 1 100 100 100

new team t2 100
new team t1 100
buy 12 1
buy 13 1
buy 14 1
buy 15 1
buy 16 1
buy 17 1
buy 18 1
buy 19 1
buy 20 1
buy 21 1
buy 22 1

buy 1 2
buy 2 2
buy 3 2
buy 4 2
buy 5 2
buy 6 2
buy 7 2
buy 8 2
buy 9 2
buy 10 2
buy 11 2
match 1 2
rank
end
Plain text

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

player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
player added to the team succesfully
1. t2
2. t1
Plain text

کدمستر - Perl / Java


  • محدودیت زمان: ۰.۵ ثانیه

  • محدودیت حافظه: ۵۰ مگابایت


یک عدد اوّل را kk-خفن می‌گوییم هر گاه در مبنای kk از دو طرف به یک شکل خوانده شود. (عددی مانند ۱۳۷۳۱ در مبنای ۱۰ از دو طرف به یک صورت خوانده می‌شود.) ویتی از شما میخواهد nnامین عدد اوّل kk-خفن را بیابید.

ورودی🔗

ورودی تنها شامل یک خط است که در آن دو عدد طبیعی nn و kk با فاصله از هم آمده‌اند. 2k162 \leq k \leq 16 1n4501 \leq n \leq 450 می‌دانیم که اعداد nn و kk به گونه‌ای داده می‌شوند که خروجی کوچک تر از 5×1065\times10^6 شود.

خروجی🔗

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

مثال🔗

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

8 10
Plain text

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

151
Plain text

هشت عدد اوّل ۱۰-خفن به ترتیب برابرند با: ۲، ۳، ۵، ۷، ۱۱، ۱۰۱، ۱۳۱، ۱۵۱. سایر اعداد اوّل بین این اعداد ۱۰-خفن نیستند.

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

4 2
Plain text

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

17
Plain text

چهار عدد اول ۲-خفن به ترتیب برابرند با: ۳، ۵، ۷، ۱۷. این اعداد در مبنای ۲ به ترتیب ۱۱، ۱۰۱، ۱۱۱، ۱۰۰۰۱ هستند که از دو طرف به یک شکل خوانده می‌شوند، اعداد اول ۲ ، ۱۱ و ۱۳ در مبنای ۲ به ترتیب ۱۰، ۱۰۱۱ و ۱۱۰۱ هستند که از دو طرف به یک شکل نیستند.

مجموعه بازی ۲! - #C++ / C


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

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

برنامه ای بنویسید که تمامِ زیر مجموعه های مجموعه اعداد ‍‍۱ تا nn را به ترتیبی مانند مثال های داده شده، در خروجی چاپ کند.

آقا حسین پس از ساعت ها تلاشِ پیاپی، موفق به حل این سوال نشد، حال این شما و این سوالِ آقا حسین.

ورودی🔗

ورودی تنها شامل یک خط است که در آن عدد طبیعی nn آمده است. 1n201 \le n \le 20

خروجی🔗

هر خط از خروجی شامل یک زیر مجموعه از مجموعه اعداد ۱ تا nn بوده و اعضای مجموعه با یک فاصله از یک دیگر چاپ خواهند شد.

مثال🔗

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

3
Plain text

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

{ 1 2 3 }
{ 1 2 }
{ 1 3 }
{ 1 }
{ 2 3 }
{ 2 }
{ 3 }
{ }
Plain text

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

4
Plain text

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

{ 1 2 3 4 }
{ 1 2 3 }
{ 1 2 4 }
{ 1 2 }
{ 1 3 4 }
{ 1 3 }
{ 1 4 }
{ 1 }
{ 2 3 4 }
{ 2 3 }
{ 2 4 }
{ 2 }
{ 3 4 }
{ 3 }
{ 4 }
{ }
Plain text

پشنج پلاس - Go / Ruby


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

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

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

ورودی🔗

در خط اول nn که تعداد محل‌هاست داده می‌شود و در خط بعد nn عدد در یک خط به شما داده میشود که عدد iiام نشان دهنده aia_i است که نمایانگر مسافت محل‌هاست. فاصله بین دو محل قدر مطلق اختلاف مسافت محل‌هاست. این نکته را در نظر داشته باشید که در صورتی که دو فاصله xy|x-y| و zt|z-t| با هم برابر بود، زوجی اولویت دارد که مسافت یکی از تک‌محل‌های این زوج از هر دو تک‌محل دیگر کمتر باشد. به طور مثال اگر xx از zz و tt کوچک‌تر بود، زوج (x,y)(x, y) اولویت دارد.

توجه کنید که ممکن است مسافت یک محل چندین بار در ورودی بیاید و شما نباید مقدار تکراری را در نظر بگیرید؛ بنابراین باید از هر مقدار فقط یکی را در نظر بگیرید. 1n901 \leq n \leq 90

2 000ai2 000-2\ 000 \leq a_i \leq 2\ 000

خروجی🔗

شما باید در (m2){m \choose 2} خط خروجی، زوج مرتب [x,y][x, y] را خروجی بدهید، به طوری که x<yx < y. این زوج مرتب‌ها بر اساس قدرمطلق اختلاف xx و yy مرتب شده‌اند. توجه کنید که mm برابر با تعداد اعداد متمایز آرایه aa است. در صورتی که اختلاف‌ها برابر بود، بر اساس مقدار xx مرتب کنید.

مثال🔗

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

4
-1 -2 3 6
Plain text

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

[-2, -1]
[3, 6]
[-1, 3]
[-2, 3]
[-1, 6]
[-2, 6]
Plain text

به طور مثال، در اینجا، اگر اعداد را مرتب‌شده در نظر بگیریم، بازه اعداد به صورت رو به رو خواهد بود: 6,3,1,26 ,3 ,-1 ,-2

حال این بازه‌ها که سر و ته هر یک زوج مرتبی از اعداد بالاست را در نظر بگیرید: [6,3],[6,1],[3,1],[6,2],[3,2],[1,2][6 , 3] ,[6 ,-1] ,[3 ,-1] ,[6 ,-2] ,[3 ,-2] ,[-1, -2]

اختلاف سر و ته هر بازه به صورت رو به رو خواهد بود: 3,7,4,8,5,13 ,7 ,4 ,8 ,5 ,1

اگر این بازه‌ها را بر اساس اختلاف سر و ته هر بازه مرتب کنیم به خروجی می‌رسیم.

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

7
22 43 32 6 30 41 43
Plain text

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

[30, 32]
[41, 43]
[22, 30]
[32, 41]
[22, 32]
[30, 41]
[32, 43]
[30, 43]
[6, 22]
[22, 41]
[22, 43]
[6, 30]
[6, 32]
[6, 41]
[6, 43]
Plain text

در این ورودی فقط یکی از ۴۳ ها در نظر گرفته شده است.

مسیر اول - Swift / C


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

ماجرا از این قرار است که امیر حسین اعداد اول را خیلی دوست دارد... . وی در خانه‌ی (a,b)(a,b) یک جدول n×nn \times n قرار گرفته و می‌خواهد به خانه‌ی (x,y)(x,y) برود. از شما کمک می‌خواهد تا یک مسیر مناسب از نقطه‌ی شروع به نقطه‌ی هدف را به او نشان دهید. این مسیر باید شرایط زیر را داشته باشد:

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

ورودی🔗

ابتدا عدد tt که نشان دهنده‌ی تعداد تست‌های سوال است داده می‌شود.

1t1001 \le t \le 100

به ازای هر تست: عدد nn به عنوان سایز ماتریس و سپس n2n^2 عدد که نشان دهنده‌ی مقادیر خانه‌های ماتریس هستند وارد می‌شوند.

1n1001 \le n \le 100 1ai,j1091 \le a_{i,j} \le 10^9

سپس در یک خط، مختصات شروع و در خط بعدی مختصات پایان داده می‌شود.(برای فهم بهتر سوال، حتماً مثال را ببینید.)

تضمین می شود:

  • محتویات خانه‌ی (a,b)(a,b) و خانه‌ی (x,y)(x,y) حتما اعدادی اول هستند.
  • جواب سوال یکتاست (دو مسیر مناسب وجود نداشته باشد).
  • خانه‌ی شروع حداکثر یک همسایه‌ی اول دارد و هر یک از خانه‌های مسیر حداکثر دو همسایه‌ی اول دارند.(سعی کنید به عنوان تمرین بیشتر، سوال را در حالتی حل کنید که مسیرهای انحرافی نیز وجود داشته باشند.)

خروجی🔗

در tt خط به ازای هر تست، اگر مسیر مناسبی با شرایط گفته شده از نقطه‌ی آغاز به نقطه‌ی هدف وجود دارد، آن مسیر را با کاراکترهای U,D,L,RU,D,L,R نشان دهید و در غیر اینصورت "!No Monaseb Masir" را چاپ کنید.

مثال🔗

ورودی نمونه🔗

3

4
5 2 6 11
4 5 13 8
7 10 3 7
2 13 15 11
0 0
3 3

3
5 2 7
8 4 1
7 5 3
2 0
0 1

6
15 2 3 5 11 77
14 5 1 4 2 1 
12 7 13 6 2 4
6 8 76 9 7 95
5 11 13 7 5 8
2 96 10 4 100 17
2 2
5 0
Plain text

خروجی نمونه🔗

RDRDRD
No Monaseb Masir!
LUURRRDDDDLLLLD
Plain text

رشته بلند - Python / PHP


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

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

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

همچنین برای شروع کار، یک رشته متشکل از حروف کوچک و بزرگ انگلیسی و کاراکتر‌های # و ! و ? و . به طول حداکثر ۱۰۰۰ داده می‌شود. همچنین توجه کنید که رشته شامل فاصله (space) نمی‌باشد. این رشته را رشته‌ی مشکوک می‌نامیم.

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

دستور copy🔗

copy key count
Plain text

در این دستور، key یک رشته مشتکل از حروف کوچک و بزرگ انگلیسی و کاراکتر‌های # و ! و ? و . می‌باشد و count یک عدد طبیعی می‌باشد.

با استفاده از این دستور، شما باید رشته‌ی key را به اندازه‌ی count مرتبه به خود بچسبانید (یعنی اگر key برابر با ab باشد و count برابر با ۳ باشد، رشته‌ی به دست آمده برابر با ababab می‌شود) و سپس اگر رشته‌ی نهایی، طولش kk باشد، باید kk حرف اول (سمت چپ) رشته‌ی مشکوک را حذف کنید و این رشته‌ی جدید را به ابتدای رشته‌ی مشکوک بچسبانید.

همچنین تضمین می‌شود در صورتی که key را به اندازه‌ی count مرتبه به خودش بچسبانیم، طولش کمتر مساوی طول رشته‌ی مشکوک باشد.

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

copy zx 2
Plain text

رشته‌ی مشکوک برابر با zxzxbbccc می‌شود.

دستور compare🔗

compare key
Plain text

در این دستور، key یک رشته مشتکل از حروف کوچک و بزرگ انگلیسی و کاراکتر‌های # و ! و ? و . می‌باشد.

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

دستور substr🔗

substr key count
Plain text

در این دستور، key یک رشته مشتکل از حروف کوچک و بزرگ انگلیسی و کاراکتر‌های # و ! و ? و . می‌باشد و count یک عدد طبیعی می‌باشد.

در صورتی که رشته‌ی key دقیقاcount مرتبه به عنوان زیررشته در رشته‌ی مشکوک ظاهر شده باشد، میزان خوبی به اندازه‌ی یک واحد افزایش پیدا می‌کند و در غیر اینصورت تغییری نمی‌کند.

دستور attach🔗

attach key count str
Plain text

در این دستور، key و str یک رشته مشتکل از حروف کوچک و بزرگ انگلیسی و کاراکتر‌های # و ! و ? و . می‌باشند و count یک عدد طبیعی می‌باشد.

شما باید رشته‌ی str را به انتهای رشته‌ی key بچسبانید و در صورتی که رشته‌ی بدست آمده دقیقا count مرتبه به عنوان زیررشته در رشته‌ی مشکوک ظاهر شده باشد، میزان خوبی به اندازه‌ی یک واحد افزایش پیدا می‌کند و در غیر اینصورت تغییری نمی‌کند.

برای مثال اگر رشته‌ی مشکوک برابر با abc باشد و دستور زیر داده شود، یک واحد به میزان خوبی افزوده می‌شود:

attach a 1 b
Plain text

دستور length🔗

length count
Plain text

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

انتهای برنامه🔗

همچنین هنگامی که تمامی دستور‌ها داده شوند، در انتها یک دستور به صورت Is it right or not? داده می‌شود که از شما می‌پرسد آیا رشته‌ی مشکوک دارای اعتبار می‌باشد یا خیر.

در صورتی که میزان خوبی بیشتر و یا مساوی نصف تعداد دستورات داده شده باشد (دستورات copy و compare و substr و attach و length)، رشته‌ دارای اعتبار است و باید Eyval را چاپ کنید و در غیر اینصورت دارای اعتبار نمی‌باشد و باید HeifShod را چاپ کنید.

ورودی🔗

در خط اول ورودی، رشته‌ی مشکوک داده می‌شود که متشکل از حروف کوچک و بزرگ انگلیسی و کاراکتر‌های # و ! و ? و . می‌باشد و طول آن حداکثر ۱۰۰۰ است.

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

در خط نهایی، یک عبارت با عنوان Is it right or not? می‌آید که توضیح آن در صورت سوال داده شده است.

خروجی🔗

در تنها خط خروجی، در صورتی که رشته‌ی مشکوک دارای اعتبار باشد باید عبارت Eyval و در غیر اینصورت عبارت HeifShod را چاپ کنید.

مثال🔗

ورودی نمونه🔗

eyval!inTamrinkheiliSadast.Hooorrraaaaa
copy hi 3
compare hihihiinTamrinkheiliSadast.Hooorrraaaaa
substr aaa 3
attach hi 2 in
length 39
Is it right or not?
Plain text

خروجی نمونه🔗

Eyval
Plain text

در این مثال، فقط در هنگام اجرای دستور attach میزان خوبی اضافه نمی‌شود.