دایره عجیب


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

حسنی و n1n - 1 نفر از دوستانش دور یک دایره نشستند و شروع به انجام بازی اتل‌متل kkتوله می‌کنند. شیوه انجام بازی این جوری هست که حسنی به عنوان نفر اول می‌گوید "سلام!". بعد از آن در هر مرحله نفر kk تا جلوتر نفر قبلی می‌گوید "سلام!". این روال ادامه دارد تا دوباره نوبت حسنی شود و آن موقع بازی تموم می‌شود.

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

ورودی🔗

در خط اول ورودی nn و kk آمده‌ است.

1kn1 0001 \le k \le n \le 1\ 000

خروجی🔗

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

مثال🔗

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

5 2
Plain text

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

5
Plain text

اگر افراد دور دایره را از 11 تا 55 شماره‌گذاری کنیم به طوری که حسنی شماره یک را بگیرد طبق چنین روندی دوباره نوبت حسنی می‌شود:

(1,3,5,2,4,1)(1, 3, 5, 2, 4, 1)

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

6 2
Plain text

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

3
Plain text

در این حالت افرادی که سلام می‌کنند چنین شماره‌هایی را دارند:

(1,3,5,1) (1, 3, 5, 1)

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

6 6
Plain text

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

1
Plain text

در این حالت نفر kkتا بعدی حسنی خود حسنی است!

حسنی نگو عکاس بگو


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

می‌توانید شعر زیر را نخوانید و تاثیری در فهم سوال ندارد.

توی ده شلمرود

حسنی تک و تنها بود

حسنی نگو بلا بگو

تنبل تنبل‌ها بگو

موی بلند، روی سیاه

ناخن دراز، واه و واه و واه

نه فلفی، نه قلقلی

نه مرغ زرد کاکلی

هیچکس باهاش رفیق نبود

تنها روی سه پایه، نشسته بود تو سایه

باباش می‌گفت: حسنی میای بریم حموم؟

«نه نمیام، نه نمیام»

سرت رو می‌خوای اصلاح کنی؟

«نه نمی‌خوام، نه نمی‌خوام»

کره الاغ کدخدا

یورتمه می‌رفت تو کوچه‌ها

«الاغه چرا یورتمه میری؟»

«دارم می‌رم بار ببرم

دیرم شده عجله دارم»

«الاغ خوب و نازنین

سر در هوا سم بر زمین

یالت بلند و پرمو

دمت مثال جارو

یک کمی به من سواری میدی؟»

«نه که نمی‌دم»

«چرا نمی‌دی؟»

«واسه این که من تمیزم

پیش همه عزیزم اما تو چی؟

موی بلند، روی سیاه

ناخن دراز، واه و واه و واه!»

غازه پرید تو استخر

«تو اردکی یا غازی؟»

«من غاز خوش زبانم»

«میای بریم به بازی؟»

«نه جانم»

«چرا نمیای؟»

«واسه این که من

صبح تا غروب

میون آب، کنار جو

مشغول کار و شستشو

اما تو چی؟

موی بلند، روی سیاه

ناخن دراز، واه و واه و واه»

در وا شد و یه جوجه

دوید و اومد تو کوچه

جیک‌جیک‌کنان

گردش‌زنان

اومد و اومد پیش حسنی

«جوجه کوچولو

کوچول موچولو

میای با من بازی کنی؟»

مادرش اومد «قدقدقدا

برو خونتون تو رو به خدا

جوجه‌ی ریزه میزه

ببین چقد تمیزه؟

اما تو چی؟

موی بلند، روی سیاه

ناخن دراز، واه و واه و واه»

حسنی با چشم گریون

پا شد و اومد تو میدون

«آی فلفلی، آی قلقلی

میاین با من بازی کنین؟»

«نه که نمیایم»

«چرا نمیاین؟»

فلفلی گفت:

من و داداشم و بابام و عموم

هفته‌ای دو بار میریم حموم

اما تو چی؟

قلقلی گفت: نگاش کنین

موی بلند، روی سیاه

ناخن دراز، واه و واه و واه

حسنی دویید پیش باباش

«حسنی میای بریم حموم؟»

«میام، میام»

«سرتو میخوای اصلاح کنی؟»

«میخوام، میخوام»

حسنی نگو یه دسته گل

تر و تمیز و تپل مپل

الاغ و خروس و جوجه غاز و ببعی

با فلفلی با قلقلی با مرغ زرد کاکلی

حلقه زدن دور حسن

الاغه می‌گفت:

اگر کاری نداری

بریم الاغ سواری

خروسه می‌گفت:

قوقولی قوقو، قوقولی قوقو

هر چی میخوای، فوری بگو

مرغه می‌گفت:

حسنی برو تو کوچه

بازی بکن با جوجه

غازه می‌گفت:

حسنی بیا با همدیگه بریم شنا

توی ده شلمرود

حسنی دیگه تنها نبود!


بعد از این که حسنی تمیز شد و با همه بازی کرد، همه دور هم جمع شدند و از بابای حسنی خواستند که ازشون عکس بگیره. ولی وقتی بابای حسنی اومد، فهمیدند که حداکثر kkتاشون درون یه عکس جا می‌شوند. بابای حسنی گفت: «خب حالا عیبی نداره، kkتا kkتا بیایید ازتون عکس می‌گیرم.»

مرغه گفت: «این‌طوری که نمی‌شه، من می‌خوام با جوجه‌هام توی یه عکس باشم.»

الاغه گفت: «تازه من هم می‌خوام با خروسه توی یه عکس باشم. اگه این‌طوریه، من اصلا عکس نمی‌گیرم.»

بابای حسنی یه ذره مِن‌و‌مِن کرد و گفت: «خب عیبی نداره. شما بیایید توی یه صف وایسید، بعد هم تا جایی که جا شدید می‌آیید توی عکس»

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

در هر عکسی که بابای حسنی می‌گیرد یک بازه پشت سر هم از دسته‌ها می‌توانند حضور داشته باشند که جمع اعضای این بازه باید حداکثر kk باشد.

در واقع شما یه آرایه‌ی nnتایی دارید و باید بگید حداقل mm چقدر هست که بتوان آرایه‌ را به mm بازه تقسیم کرد که مجموع اعداد هر بازه حداکثر kk باشد.

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

ورودی🔗

ورودی شامل دو خط است. در خط اول به ترتیب ابتدا nn تعداد گروه‌ها و سپس kk حداکثر ظرفیت یک عکس به شما داده می‌شود.

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

1n,k100 000 1 \le n, k \le 100\ 000

0aik0 \le a_i \le k

خروجی🔗

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

مثال🔗

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

5 4
3 4 1 2 2
Plain text

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

4
Plain text

بازه‌ها به صورت {3},{4},{1,2},{2}\{3\}, \{4\}, \{1, 2\}, \{2\} خواهند بود. یک جواب دیگر برای این مثال {3},{4},{1},{2,2}\{3\}, \{4\}, \{1\}, \{2, 2\} است.

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

5 8
3 4 1 2 2
Plain text

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

2
Plain text

هارمه کناب


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

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

1 ip:username
Plain text

این درخواست یعنی کاربری با نام‌ کاربری username و آی‌پی ip به همراه‌بانک وصل شد و در صورتی که username معتبر نباشد باید عبارت ‍‍‍invalid username را چاپ کنید.
به یک نام‌ کاربری معتبر می‌گوییم اگر فقط از حروف کوچک و بزرگ انگلیسی و اعداد تشکیل شده باشد.
برای مثال 1aAB2 معتبر است ولی ab*2 معتبر نیست.

2 ip:username:money
Plain text

این درخواست یعنی کاربری با آی‌پی ip به حسابی با نام‌ کاربری username به اندازه money پول ریخته‌ است. در واقع باید از حساب ip به اندازه money کم کنید و به حساب username اضافه کنید.

3 ip
Plain text

با داده شدن این درخواست مقدار پول داخل حساب فرد با آی‌پی ip را نمایش دهید.

(دقت کنید که پول هر فرد می‌تواند منفی هم بشود و هرکس در ابتدا ۰ واحد پول دارد)

ورودی🔗

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

در هر درخواست ابتدا type داده می‌شود که برابر یکی از اعداد ۱ یا ۲ یا ۳ است و اگر typetype برابر با ۱ باشد در ادامه دو رشته ip و username به شما داده می‌شود که توسط کاراکتر : از هم جدا شده‌اند. اگر typetype مساوی ۲ باشد سه رشته ip و username و money داده می‌شود که با : از هم جدا شده‌اند و اگر هم typetype مساوی ۳ باشد رشته ip داده می‌شود.

0q,money100 0000 \le q,money \le 100\ 000

طول username و ip حداکثر ۱۵ است.

تضمین می‌شود که:

  • یک کاربر دوبار به همراه بانک وصل نمی‌شود و آی‌پی و نام‌ کاربری هیچ دو فردی یکسان نیست.
  • در صورتی که نام کاربری معتبر نباشد تنها ممکن است کاراکترهای _ یا * یا # یا $ در آن به کار رفته باشد.
  • همه‌ی ورودی‌های نوع ۲ و ۳ معتبر هستند؛ یعنی کاربری با آی‌پی یا نام کاربری مشخص شده‌، وجود دارد.
  • همه ipها به صورت ۴ عدد بین ۰ تا ۲۵۵ هستند که با نقطه از هم جدا شده‌اند.
  • حداکثر پولی که یک نفر می‌تواند داشته باشد 10910^9 است.

خروجی🔗

برای هر درخواست نوع ۱ در صورتی که username معتبر نیست باید عبارت invalid username را چاپ کنید و برای هر درخواست نوع ۳ باید مقدار پول حساب فرد خواسته شده را چاپ کنید. (پاسخ هر درخواست را در یک خط جدید چاپ کنید.)

مثال🔗

ورودی نمونه🔗

9
1 46.51.16.72:SmsS
1 192.168.10.13:#hacker$user
1 131.41.61.213:faeila
2 46.51.16.72:faeila:1000
3 46.51.16.72
3 131.41.61.213
2 131.41.61.213:SmsS:500
3 46.51.16.72
3 131.41.61.213
Plain text

خروجی نمونه🔗

invalid username
-1000
1000
-500
500
Plain text

توضیحات:

  • نام کاربری #hacker$user معتبر نیست برای همین باید invalid username خروجی بدهید.

  • از حساب SmsS هزار واحد پول کم می‌شود و به حساب faeila اضافه می‌شود و حالا SmsS منفی هزار و faeila هزار واحد پول دارد.

  • از حساب faeila پانصد واحد کم می‌شود و حالا پانصد واحد پول دارد و SmsS منفی پانصد.

مسیر عجیب


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

در کشور(!) شلمرود، nn شهر وجود دارد که با mm جاده دوطرفه به هم وصل شده‌اند.‌ طول جاده iiام هم wiw_i کیلومتر است. حسنی یک الاغ هم دارد که با استفاده از آن می‌تواند با سرعت یک کیلومتر بر ساعت جاده‌ها را طی کند.

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

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

ورودی🔗

در خط اول ورودی nn و mm آمده‌ است. سپس در خط بعدی nn عدد آمده که عدد ii-ام tit_i را نشان می‌دهد. در هر یک از mm خط بعدی هم سه عدد آمده که دو سر جاده و وزن آن جاده را مشخص می‌کند.

1n,m,ti,wi1 0001 \le n, m, t_i, w_i \le 1\ 000

خروجی🔗

در تنها خط خروجی کمترین زمان برای رسیدن از شهر شماره 11 به شهر شماره nn را چاپ کنید. در صورتی هم که مسیری از شهر 11 به شهر nn وجود نداشته باشد -1 چاپ کنید.

مثال🔗

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

3 2
1 1000 1000
1 2 100
2 3 100
Plain text

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

101
Plain text

در این نمونه وقتی که در شهر یک هستیم 9999 بار از قابلیت استفاده می‌کنیم و بعد از آن طول هر دو جاده یک می‌شود. بعد از آن می‌توان بعد از دو ساعت به شهر شماره سه رسید.

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

3 2
3 1 1000
1 2 100
2 3 100
Plain text

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

200
Plain text

در این مثال بدون استفاده از قابلیت می‌توان بعد از 200200 ساعت به شهر 33 رسید.

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

4 2
1 2 3 4
1 2 5
2 3 10
Plain text

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

-1
Plain text

در این نمونه مسیری از شهر 11 به شهر 44 وجود ندارد.

جدی


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

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

آرایه‌ای به نام aa به طول n n داریم. می‌خواهیم بلندترین زیردنباله‌ای از آرایه را پیدا کنیم که صعودی-نزولی باشد.

حسنی به دنباله b0,b1,...,bk1 b_0, b_1, ... , b_{k-1\ } صعودی-نزولی می‌گوید اگر سه شرط زیر برای آن برقرار باشد:

  • به ازای برای هر ii فرد که 0<i<k1 0 \lt i \lt k-1 داشته باشیم : bi1<bi>bi+1  b_{i-1} \lt b_{i} \gt b_{i+1} \
  • به ازای برای هر ii زوج که 0<i<k1 0 \lt i \lt k-1 داشته باشیم : bi1>bi<bi+1  b_{i-1} \gt b_{i} \lt b_{i+1} \
  • برای ii برابر با صفر هم داشته باشیم: b0<b1b_0 \lt b_1

حال شما باید طول بلندترین زیردنباله‌ای از آرایه aa که صعودی-نزولی است را پیدا کنید و آن را چاپ کنید.

نکته: به آرایه bb یک زیردنباله از آرایه aa می‌گوییم اگر بتوان با حذف تعدادی عضو از آرایه aa به آرایه bb رسید.

ورودی🔗

در اولین خط ورودی عدد nn و در خط بعدی nn عدد امده است که عدد ii ام مقدار خانه ii ام آرایه است. 1n100 000 1 \le n \le 100\ 000 ai109 |a_i| \le 10^9

خروجی🔗

در تنها خط خروجی طول بلندترین زیردنباله صعودی-نزولی را بگویید.

مثال🔗

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

7
5 1 9 2 3 6 2
Plain text

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

5
Plain text

برای مثال دنباله <1,9,2,3,2><1, 9, 2, 3, 2> یکی از جواب‌های ممکن است.

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

4
1 2 1 2
Plain text

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

4
Plain text

در این حالت کل آرایه aa صعودی-نزولی است.

وروی نمونه ۳🔗

4
2 1 2 1
Plain text

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

3
Plain text

دریچه


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

آرایه aa، شامل اعداد a1,a2,...,an a_1, a_2, ..., a_n\ روی تخته نوشته شده است. در هر گام می‌توانیم یکی از دو عملیات زیر را انجام دهیم.

  • یک عدد xx از روی تخته در نظر بگیریم و تمام اعداد xx روی تخته را با x2\left \lfloor{ \frac {x}{2}}\right \rfloor جایگزین کنیم. (یعنی به جای هر xx روی تخته، x2\left \lfloor{ \frac {x}{2}}\right \rfloor قرار می‌دهیم.‌)
  • یک عدد xx از روی تخته در نظر بگیریم و تمام اعداد xx روی تخته را پاک کنیم.

از عملیات نوع دوم حداکثر kk بار می‌توانیم استفاده کنیم.

کم‌ترین تعداد مرحله برای این که در انتها کلا عددی روی تخته باقی نماند، یا تمامی اعداد باقی مانده برابر با 00 باشد، چه‌قدر است؟

ورودی🔗

ورودی شامل دو خط است که خط اول آن شامل دو عدد n,kn, k است.

در خط دوم nn عدد a1,a2,..,an a_1, a_2, .., a_n\ می‌آید که اعداد اولیه روی تخته را مشخص می‌کند.

1n100 0001 \le n \le 100\ 000 0k100 \le k \le 10 1ai1091 \le a_i \le 10^9

خروجی🔗

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

مثال🔗

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

5 2
1 2 3 4 5
Plain text

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

5
Plain text

یکی از روش‌ها این است که ابتدا اعداد 55 و 44 را با عملیات نوع اول به 22 تبدیل کنیم. سپس عدد 33 را به 11 تبدیل کنیم، اعداد روی تخته <1,2,1,2,2><1, 2, 1, 2, 2> خواهند بود. در نهایت عدد 1,21, 2 را پاک کنیم و دنباله تهی می‌شود. در مجموع 55 عملیات انجام شده است.

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

4 1
1 1 2 3
Plain text

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

3
Plain text

در یکی از روش‌های بهینه ابتدا عدد 33 را حذف می‌کنیم،‌ سپس 22 را با عملیات اول به 11 تبدیل می‌کنیم و نهایتا همه اعداد 11 را با عملیات اول به صفر تبدیل می‌کنیم.

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

10 3
10 20 30 40 50 60 70 80 90 100
Plain text

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

16
Plain text

جهمه


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

اگر دنباله‌ای از اعداد داشته باشید به اولین عدد طبیعی‌ای که در آن ظاهر نشده Mex آن دنباله می‌گوییم.
برای مثال Mex دنباله (1,2,5,9)(1, 2, 5, 9) برابر 33 و Mex دنباله (2,5)(2, 5) برابر 11 است.

دنباله a1,a2,a3,...,an a_1, a_2, a_3,...,a_n\ به شما داده شده است و باید جمع Mex تمام زیربازه‌های آن را به دست بیاورید. (در مجموع n(n+1)2\frac{n(n+1)}{2} زیربازه داریم.)

در واقع اگر  Mexi,j\ Mex_{i,j}‌را برابر Mex زیر دنباله (ai,ai+1,...,aj) (a_i,a_{i+1},...,a_j)\ تعریف کنیم، شما باید مقدار زیر را چاپ کنید. i=1n j=inMexi,j\sum_{i=1}^{n}\ \sum_{j=i}^{n} Mex_{i,j}

ورودی🔗

در سطر اول ورودی عدد nn و در سطر دوم nn عدد به شما داده می‌شود که عدد ii-ام برابر عضو ii ام دنباله است.

1n,ai100 0001 \le n, a_i \le 100\ 000

خروجی🔗

در تنها خط خروجی مقدار خواسته شده را نمایش دهید.

مثال🔗

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

5
1 2 3 4 5
Plain text

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

30
Plain text

توضیح:

Mex1,1=2Mex_{1,1} = 2
Mex1,2=3Mex_{1,2} = 3
Mex1,3=4Mex_{1,3} = 4
Mex1,4=5Mex_{1,4} = 5
Mex1,5=6Mex_{1,5} = 6

و Mex زیربازه‌هایی که ۱ را ندارند برابر ۱ است.

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

8
2 1 4 2 1 3 2 1
Plain text

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

113
Plain text