در یک شرکت تاکسیرانی تاکسی در یک صف و نفر در صفی دیگر قرار دارند. افراد صف به ترتیب سوار جلوترین تاکسی میشوند و هر تاکسی که پر شود (۴ نفر سوار آن شوند) بلافاصله حرکت میکند.
هر تاکسی دو قسمت دارد. صندلی جلو که دقیقاً یک مسافر سوار میشود و صندلیهای عقب که دقیقاً ۳ مسافر سوار میشوند. همچنین لازم به ذکر است مسافران تنها از درِ سمت راست قادر به سوار شدن یا پیاده شدن در صندلیهای عقب هستند.
شهر، یک خیابان اصلی دارد و ۱۰۱ ایستگاه با شمارههای ۰ تا ۱۰۰ به ترتیب روی خیابان قرار دارند. ایستگاه ۰ همان شرکت تاکسیرانی است و مقصد هر شخص یکی از ایستگاههای ۱ تا ۱۰۰ است. هر تاکسی از ایستگاه ۰ شروع کرده و به سمت ایستگاه ۱۰۰ میرود و هر وقت به مقصد یکی از مسافران میرسد توقف میکند. از آنجایی که فقط درِ سمت راست امکان باز شدن دارد، وقتی شخصی از صندلیهای عقب میخواهد در مقصد خود پیاده شود افرادی که سمت راست او هستند هم مجبور به پیاده شدن میشوند و این باعث ناراحتی آنها میشود.
به طور دقیقتر میزان ناراحتی افراد یک تاکسی برابر با تعداد دفعاتی است که آنها در ایستگاهی به جز مقصد خود پیاده شدهاند. توجه کنید یک فرد ممکن است چند بار ناراحت شود و هربار میزان ناراحتیاش زیاد میشود.
هر شخص در زمان سوار شدن یا در صندلی جلو مینشنید یا از درِ راست وارد صندلیهای عقب میشود و در چپترین صندلی خالی مینشیند. حال شرکت تاکسیرانی از شما میخواهد با دانستن مقاصد ۴ نفر مسافر هر تاکسی، تعیین کنید در هر تاکسی کدام شخص جلو بنشیند تا مجموع میزان ناراحتی افراد کمینه شود.
برای درک بیشتر، به توضیحات مثالها مراجعه کنید.
در سطر اول ورودی تعداد تاکسیها میآید و در سطر بعد مقصد فرد ام میآید.
در سطر ام کمینه مجموع ناراحتی افراد تاکسی ام خروجی داده شود.
در تاکسی اول ۴ نفر با مقصد یکسان سوار میشوند و در تمام حالات سوار شدن هیچ کس ناراحت نمیشود.
در تاکسی دوم افراد به ترتیب با مقصدهای ۲ و ۱ و ۱ و ۲ قرار است سوار شوند و اگر سه نفر اول به ترتیب عقب بنشینند و نفر آخر جلو بنشیند آنگاه هیچ ناراحتی وجود نخواهد داشت. چون در ایستگاه ۱ دو نفری که آخر از همه سوار شدهاند پیاده میشوند و در ایستگاه ۲ هم دو نفر دیگر پیاده میشوند.
در تاکسی سوم اگر فرد با مقصد ۱ جلو بنشیند و افراد با مقصدهای ۳ و ۴ و ۲ به ترتیب عقب سوار شوند مجموع میزان ناراحتی ۱ است و میتوان برسی کرد حالتی با ۰ ناراحتی وجود ندارد. ابتدا در ایستگاه ۱ فرد با مقصد ۱ که جلو نشسته است پیاده میشود. در ایستگاه ۲ نیز همینطور فرد ۲ بدون ایجاد ناراحتی پیاده میشود. اما در ایستگاه ۳ چون فرد ۴ بعد از فرد ۳ عقب نشسته پس به در نزدیکتر است و مجبور است برای نفر ۳ یکبار پیاده و دوباره سوار شود و ۱ ناراحتی به وجود میآید.
درختی با راس داریم که هر راس آن ممکن است قرمز یا مشکی باشد (حداقل یک راس به رنگ قرمز موجود است). همینطور روی هر راس عددی نوشته شده است که میتواند مثبت، منفی یا صفر باشد.
زیردرختی از این درخت را در نظر بگیرید که شامل تمامی راسهای قرمز بشود و مجموع اعداد راسهایش بیشینه باشد. از شما خواسته شده است که مجموع اعداد راسهای این زیردرخت را چاپ کنید. منظور از زیردرخت مجموعهای از راسها است، که بدون استفاده از دیگر راسها به همدیگر مسیر داشته باشند.
در خط اول ورودی عدد آمده است که نمایانگر تعداد راسهای درخت است.
در خط دوم رشتهای به طول آمده که هر کدام از حرفهایش میتواند R
یا B
باشد. حرف -ام این رشته نشاندهندهی رنگ راس -ام است (R
به معنای قرمز و B
به معنای مشکی)
در خط بعدی عدد آمده است که عدد -ام نمایانگر عدد راس است و آن را با نمایش میدهیم.
در نهایت در خط آخر، در هر خط دو عدد و آمده است که نشاندهندهی وجود یال میان رئوس و است.
در تنها خط خروجی باید پاسخ خواسته شده را چاپ کنید.
درخت این نمونه در شکل زیر نمایش داده شده است. بهترین حالت این است که زیردرختمان شامل راسهای ۱ و ۲ باشد که مجموع آنها ۸ است.
این درخت نیز در تصویر زیر پیداست، بهترین حالت این است که زیردرخت ما شامل رئوس ۳، ۴ و ۵ باشد. توجه کنید ممکن نیست راس ۲ به این رئوس اضافه شود، زیرا در آن صورت شرط زیردرخت بودن نقض میشود.
آرایهای متشکل از عدد داریم. یک بازه از این اعداد را زیبا مینامیم اگر و تنها اگر مجموع اعداد حاضر در این بازه کمتر یا مساوی عدد و بیشتر یا مساوی عدد باشد. به عبارتی دیگر، قدر مطلق مجموع اعداد این بازه باید حداکثر باشد.
روی این آرایه بار عملیات انجام شده است، هر عملیات به این صورت است که دو عدد و مشخص شدهاند ()، سپس عضو -ام آرایه با عدد جمع میشود و از عضو -ام آرایه عدد تفریق میشود. (توجه کنید که مقدار میتواند منفی هم باشد)
از شما خواسته شده یکبار در ابتدا و سپس بعد از اعمال هر عملیات، تعداد بازههای زیبای آرایه را محاسبه کنید.
دقت کنید تمامی عملیاتها پایا هستند، یعنی اثر آنها در عملیاتهای بعدی نیز روی آرایه میماند.
در خط اول ورودی به ترتیب سه عدد ، و آمدهاند. در خط دوم عدد آمدهاند که اعداد اولیهی آرایه هستند و عدد را با نمایش میدهیم. در خط بعدی، در هر خط به ترتیب دو عدد و آمدهاند که عملیات را مشخص میکنند.
همچنین تضمین میشود قدر مطلق تمامی اعداد آرایه بعد از هر کوئری حداکثر خواهد ماند.
خروجی شما باید شامل خط باشد که نشان دهد در ابتدا و بعد از انجام هر عملیات تعداد بازههای زیبای آرایه چقدر است.
در این نمونه در ابتدا بازههای ، ، و زیبا هستند.
بعد از عملیات اول آرایه تبدیل میشود به: . بعد از این تغییر بازههای ، ، ، و زیبا خواهند بود.
بعد از عملیات دوم آرایه به این صورت خواهد بود: . بعد از این تغییر بازههای ، ، و زیبا هستند.
(منظور از بازهی بازهای است که از عضو ام شروع شده و تا عضو ام ادامه دارد)
از شما میخواهیم برنامهای بنویسید تا با دریافت نام عناصر، آرایش الکترونی آن را نشان دهد.
طبق این نظریه، الکترونها در تعدادی «لایه» قرار دارند، هر «لایه» از تعدادی «زیرلایه» تشکیل شده که هر کدام ظرفیت تعدادی الکترون دارند. ۴ نوع زیرلایه داریم که با حروف s
، p
، d
و f
نشان میدهیم. ظرفیت این لایهها بهترتیب ۲، ۶، ۱۰ و ۱۴ الکترون است. هر «لایه»، از تعدادی «زیرلایه» تشکیل شده:
s
.s
و یک زیرلایهی p
.s
، یک زیرلایهی p
و یک زیرلایهی d
.s
، یک زیرلایهی p
، یک زیرلایهی d
و یک زیرلایهی f
.حال میتوانیم لایه و زیرلایهها را به صورت یک رشته با دو کاراکتر نشان دهیم. مثلاً 3p
یعنی زیرلایهی نوع p
در لایهی سوم.
اگر یک اتم از الکترون تشکیل شده باشد به ترتیب زیر، یکی یکی به زیرلایهها اضافه میشود تا ظرفیت آن پر شود و سپس به سراغ زیرلایهی بعدی میرود.
در این اتمهای Cu
، Cr
، Nb
، Mo
، Ru
، Rh
، Pd
، Ag
، La
، Ce
، Gd
، Pt
،
Au
، Ac
، Th
، Pa
، U
، Np
، Cm
و Lr
استثنا هستند و از قوانین گفته شده پیروی نمیکنند. میتوانید آرایش الکترونی آنها را از اینجا مشاهده کنید.
در سطر اول ورودی، عدد صحیح داده میشود. در سطر بعدی، در هر سطر، نام یک عنصر به صورت یک رشته از حروف کوچک و بزرگ انگلیسی است که حرف اول بزرگ و سایر حرفها کوچک است داده میشود.تضمین میشود نام این عنصر در ۱۰۴ عنصر اول جدول تناوبی موجود باشد.
خروجی سطر دارد و در هر سطر، زیرلایههای اتم را مانند نمونهها چاپ کنید.
بازی StickMan:Legacy
یک بازی استراتژیک است که در آن هر کس ارتش خودش را تجهیز میکند و به جنگ دشمنان میرود. از شما میخواهیم برنامهای بنویسید که درخواستهای بازیکن را مدیریت کند.
شما برای ملحق کردن افراد به ارتش باید به آنها سکه بدهید. همچنین نمیتواند بیش از ۵۰ واحد نیرو زنده در ارتش خود داشتهباشید. در ابتدای بازی ۵۰۰ سکه دارید و هیچ کسی در ارتش شما نیست. دولت از لحظهی ابتدایی بازی، هر ۲۰ ثانیه یکبار ۱۸۰ سکه به ارتش شما میدهد. (بهجز لحظهی شروع)
در این ارتش ۶ سِمَت مختلف «معدنکار»، «شمشیرزن»، «تیرانداز»، «سپردار»، «جادوگر» و «غول» برای افراد وجود دارد. هر کدام از این سِمَتها ویژگی و شرایط مختلفی دارند که در پایین توضیح داده میشود.
هر کس بسته به سمتی که دارد، مقداری جان دارد، اگر در جنگ آسیبی به کسی وارد شود، به همان اندازه از جانش کم میشود و اگر جان کسی بعد از یک صدمه، کمتر یا مساوی ۰ شود، میمیرد.
ارتش شما باید به مبارزه با یک اژدها برود. این اژدها واحد جان دارد و هر چندوقت یکبار به یکی از افراد ارتش شما صدمه میزند.
در میدان جنگ ۴ معدن وجود دارد و روی هر معدن حداکثر دو معدنکار میتوانند کار کنند. اگر تعداد معدنکارها بیشتر ۸ باشد، ۸ نفر روی معادن کار میکنند و بقیه بیکار میایستند.
miner
): هر معدنکار یک واحد نیرو حساب میشود. جان هر معدنکار ۱۰۰ است. استخدام کردن یک معدنکار ۱۵۰ سکه نیاز دارد. هر معدنکار بعد از استخدام، در صورتی که بتواند روی یک معدن مشغول شود، هر ۱۰ ثانیه، ۱۰۰ سکه به دارای شما اضافه میکند. swordwrath
): هر شمشیرزن یک واحد نیرو حساب میشود. جان هر شمشیرزن ۱۲۰ است. استخدام کردن یک شمشیرزن ۱۲۵ سکه نیاز دارد. شمشیرزن هر ثانیه بعد از استخدام، یک ضربه به اژدها میزند و از جان او ۲۰ واحد کم میکند.archidon
): هر تیرانداز یک واحد نیرو حساب میشود. جان هر تیرانداز ۸۰ است. استخدام کردن یک تیرانداز ۳۰۰ سکه نیاز دارد. تیرانداز هر ثانیه بعد از استخدام، یک تیر به اژدها میزند و از جان او ۱۰ واحد کم میکند.spearton
): هر سپردار دو واحد نیرو حساب میشود. جان هر سپردار ۲۵۰ است. استخدام کردن یک سپردار ۵۰۰ سکه نیاز دارد. سپردار هر سه ثانیه بعد از استخدام، یک نیزه به اژدها میزند و از جان او ۳۵ واحد کم میکند.magikill
): هر جادوگر چهار واحد نیرو حساب میشود. جان هر جادوگر ۸۰ است. استخدام کردن یک جادوگر ۱۲۰۰ سکه نیاز دارد. جادوگر هر پنج ثانیه بعد از استخدام، یک آتش به اژدها میزند و از جان او ۲۰۰ واحد کم میکند.giant
): هر غول چهار واحد نیرو حساب میشود. جان هر غول ۱۰۰۰ است. استخدام کردن یک غول ۱۵۰۰ سکه نیاز دارد. غول هر چهار ثانیه بعد از استخدام، یک ضربه به اژدها میزند و از جان او ۱۵۰ واحد کم میکند.در این سوال از شما میخواهیم درخواست که بازیکن از ارتش دارد را مدیریت کنید.
add
)
این درخواست یعنی بازیکن میخواهد فردی با سمت <role>
در لحظهی <timestamp>
به بازی اضافه کند. (تضمین میشود که <role>
یکی از ۶ کلمه بالا باشد.)
game over
را چاپ کنید.not enough money
را چاپ کنید.too many army
را چاپ کنید. اگر هیچکدام از دو حالت بالا اتفاق نیفتاد، این فرد را به ارتش اضافه کنید و یک عدد که شمارهی این فرد است را چاپ کنید. افرادی که به ارتش اضافه میشوند به ترتیب از ۱ شماره گذاری میشوند. (اگر افراد کشته هم شوند شمارهی آنها حفظ میشود ولی اگر به هر دلیل از خطاهای بالا اضافه نشوند دیگر شماره ندارند.)
اگر چند خطا از خطاهای بالا باهم وجود داشت، تنها پیامی را چاپ کنید که زودتر آمده است.
damage
)
این درخواست، یعنی فرد شمارهی <idx>
توسط اژدها به اندازهی <d>
در لحظهی <timestamp>
ضربه خورده است.
game over
را چاپ کنید.<idx>
به ارتش شما هنوز نیامده یا اکنون زنده نیست. پیام no matter
را چاپ کنید.اگر هیچکدام از حالتهای بالا اتفاق نیفتاد، از جان <idx>
بهاندازهی <d>
کم کنید. اگر بعد از این ضربه این فرد کشته شد، رشتهی dead
و درغیراین صورت جان باقیماندهی آن را چاپ کنید.
توجه کنید اگر ضربه اژدها باعث کشته شدن یک معدنکار شود و معدنکار بیکاری داشته باشیم، معدنکاری که زودتر در ارتش استخدام شده، جایگزین میشود.
enemy-status
)
این درخواست، یعنی میخواهیم وضعیت اژدها را در لحظهی <timestamp>
بدانیم.
game over
را چاپ کنید.در غیراینصورت جان باقیمانده اژدها را در این لحظه چاپ کنید.
army-status
)
این درخواست، یعنی میخواهیم تعداد افراد زنده به تفکیک سمتشان در ارتش، را در لحظهی <timestamp>
بدانیم.
game over
را چاپ کنید.در غیراینصورت ۶ عدد صحیح که با یک فاصله از هم جدا شدهاند و هر کدام به ترتیبی که در بالا معرفی شدند، تعداد افراد زنده را در این لحظه را چاپ کنید. (هر فرد را مستقل از سمت یکبار بشمارید.)
money-status
)
این درخواست، یعنی میخواهیم وضعیت مالی را در لحظهی <timestamp>
بدانیم.
game over
را چاپ کنید.در غیراینصورت تعداد سکههای ذخیره شده را در این لحظه چاپ کنید.
<timestamp>
نشان میدهیم. فرمت هر کدام به صورت mm:ss:xxx
است که یعنی اتفاق در دقیقه mm
، ثانیه ss
و میلیثانیه xxx
اتفاق افتاد است. در سطر اول ورودی، دو عدد صحیح و با یک فاصله داده میشود که به ترتیب نشاندهندهی تعداد درخواستها و جان اژدها است.
در سطر بعدی، در هر سطر یکی از دستوراتی که در صورت سوال گفته شده میآید.
تضمین میشود زمان همهی درخواستها از نظر زمانی مرتب هستند و هیچ دو اتفاقی حتی اتفاقهایی که به تناوب تکرار میشوند، همزمان رخ نمیدهد.
خروجی سطر دارد و در هر سطر خروجی متناسب با درخواستها را به ترتیب چاپ کنید.
همانطور که در سوال گفته شد؛ دولت بعد از شروع بازی هر ۲۰ ثانیه، ۱۸۰ سکه به ارتش کمک میکند. پس تا لحظهی قبل از ثانیه ۲۰، مقدار پول ارتش همان ۵۰۰ سکهای است که از ابتدا دارد و اولین لحظه بعد از ثانیه ۲۰، ۱۸۰ سکه به ارتش اضافه میشود.
در ۴ درخواست بعدی، در هر درخواست یک معدنکار به ارتش اضافه میشود. هر معدنکار برای استخدام ۱۵۰ سکه نیاز دارد. پس بعد از استخدام معدنکار ۴ام دیگر پول کافی برای استخدام معدنکار ۵ام در لحظهی ۲۹:۰۰۹ نداریم. اما در لحظهی ۳۰:۰۱۰، هر ۴ معدنکار ۱۰ ثانیه هست که مشغول به کار شدند و هر کدام ۱۰۰ سکه به ارتش اضافه کردهاند. پس میتوانیم در این لحظه یک معدنکار داشته باشیم.