- محدودیت زمان: ۱ ثانیه
- محدودیت حافظه: ۲۵۶ مگابایت
بازی StickMan:Legacy
یک بازی استراتژیک است که در آن هر کس ارتش خودش را تجهیز میکند و به جنگ دشمنان میرود. از شما میخواهیم برنامهای بنویسید که درخواستهای بازیکن را مدیریت کند.
توضیحات بازی
شما برای ملحق کردن افراد به ارتش باید به آنها سکه بدهید. همچنین نمیتواند بیش از ۵۰ واحد نیرو زنده در ارتش خود داشتهباشید. در ابتدای بازی ۵۰۰ سکه دارید و هیچ کسی در ارتش شما نیست. دولت از لحظهی ابتدایی بازی، هر ۲۰ ثانیه یکبار ۱۸۰ سکه به ارتش شما میدهد. (بهجز لحظهی شروع)
در این ارتش ۶ سِمَت مختلف «معدنکار»، «شمشیرزن»، «تیرانداز»، «سپردار»، «جادوگر» و «غول» برای افراد وجود دارد. هر کدام از این سِمَتها ویژگی و شرایط مختلفی دارند که در پایین توضیح داده میشود.
هر کس بسته به سمتی که دارد، مقداری جان دارد، اگر در جنگ آسیبی به کسی وارد شود، به همان اندازه از جانش کم میشود و اگر جان کسی بعد از یک صدمه، کمتر یا مساوی ۰ شود، میمیرد.
ارتش شما باید به مبارزه با یک اژدها برود. این اژدها واحد جان دارد و هر چندوقت یکبار به یکی از افراد ارتش شما صدمه میزند.
در میدان جنگ ۴ معدن وجود دارد و روی هر معدن حداکثر دو معدنکار میتوانند کار کنند. اگر تعداد معدنکارها بیشتر ۸ باشد، ۸ نفر روی معادن کار میکنند و بقیه بیکار میایستند.
ویژگی سِمَتها
- معدنکار (
miner
): هر معدنکار یک واحد نیرو حساب میشود. جان هر معدنکار ۱۰۰ است. استخدام کردن یک معدنکار ۱۵۰ سکه نیاز دارد. هر معدنکار بعد از استخدام، در صورتی که بتواند روی یک معدن مشغول شود، هر ۱۰ ثانیه، ۱۰۰ سکه به دارای شما اضافه میکند. - شمشیرزن (
swordwrath
): هر شمشیرزن یک واحد نیرو حساب میشود. جان هر شمشیرزن ۱۲۰ است. استخدام کردن یک شمشیرزن ۱۲۵ سکه نیاز دارد. شمشیرزن هر ثانیه بعد از استخدام، یک ضربه به اژدها میزند و از جان او ۲۰ واحد کم میکند. - تیرانداز (
archidon
): هر تیرانداز یک واحد نیرو حساب میشود. جان هر تیرانداز ۸۰ است. استخدام کردن یک تیرانداز ۳۰۰ سکه نیاز دارد. تیرانداز هر ثانیه بعد از استخدام، یک تیر به اژدها میزند و از جان او ۱۰ واحد کم میکند. - سپردار (
spearton
): هر سپردار دو واحد نیرو حساب میشود. جان هر سپردار ۲۵۰ است. استخدام کردن یک سپردار ۵۰۰ سکه نیاز دارد. سپردار هر سه ثانیه بعد از استخدام، یک نیزه به اژدها میزند و از جان او ۳۵ واحد کم میکند. - جادوگر (
magikill
): هر جادوگر چهار واحد نیرو حساب میشود. جان هر جادوگر ۸۰ است. استخدام کردن یک جادوگر ۱۲۰۰ سکه نیاز دارد. جادوگر هر پنج ثانیه بعد از استخدام، یک آتش به اژدها میزند و از جان او ۲۰۰ واحد کم میکند. - غول (
giant
): هر غول چهار واحد نیرو حساب میشود. جان هر غول ۱۰۰۰ است. استخدام کردن یک غول ۱۵۰۰ سکه نیاز دارد. غول هر چهار ثانیه بعد از استخدام، یک ضربه به اژدها میزند و از جان او ۱۵۰ واحد کم میکند.
برنامهای که باید بنویسید
در این سوال از شما میخواهیم درخواست که بازیکن از ارتش دارد را مدیریت کنید.
اضافه کردن بازیکن (add
)
add
)این درخواست یعنی بازیکن میخواهد فردی با سمت <role>
در لحظهی <timestamp>
به بازی اضافه کند. (تضمین میشود که <role>
یکی از ۶ کلمه بالا باشد.)
- اگر اژدها در این لحظه کشته شده، پیام
game over
را چاپ کنید. - اگر تعداد سکههای ما در این لحظه، از سکههای مورد نیاز برای استخدام این فرد کمتر است. پیام
not enough money
را چاپ کنید. - اگر با اضافه شدن این فرد به ارتش، تعداد واحدهای نیرو از ۵۰ بیشتر میشود. پیام
too many army
را چاپ کنید.
اگر هیچکدام از دو حالت بالا اتفاق نیفتاد، این فرد را به ارتش اضافه کنید و یک عدد که شمارهی این فرد است را چاپ کنید. افرادی که به ارتش اضافه میشوند به ترتیب از ۱ شماره گذاری میشوند. (اگر افراد کشته هم شوند شمارهی آنها حفظ میشود ولی اگر به هر دلیل از خطاهای بالا اضافه نشوند دیگر شماره ندارند.)
اگر چند خطا از خطاهای بالا باهم وجود داشت، تنها پیامی را چاپ کنید که زودتر آمده است.
ضربه خوردن (damage
)
damage
)این درخواست، یعنی فرد شمارهی <idx>
توسط اژدها به اندازهی <d>
در لحظهی <timestamp>
ضربه خورده است.
- اگر اژدها در این لحظه کشته شده، پیام
game over
را چاپ کنید. - اگر شخصی با شمارهی
<idx>
به ارتش شما هنوز نیامده یا اکنون زنده نیست. پیامno matter
را چاپ کنید.
اگر هیچکدام از حالتهای بالا اتفاق نیفتاد، از جان <idx>
بهاندازهی <d>
کم کنید. اگر بعد از این ضربه این فرد کشته شد، رشتهی dead
و درغیراین صورت جان باقیماندهی آن را چاپ کنید.
توجه کنید اگر ضربه اژدها باعث کشته شدن یک معدنکار شود و معدنکار بیکاری داشته باشیم، معدنکاری که زودتر در ارتش استخدام شده، جایگزین میشود.
گزارش وضعیت اژدها (enemy-status
)
enemy-status
)این درخواست، یعنی میخواهیم وضعیت اژدها را در لحظهی <timestamp>
بدانیم.
- اگر اژدها در این لحظه کشته شده، پیام
game over
را چاپ کنید.
در غیراینصورت جان باقیمانده اژدها را در این لحظه چاپ کنید.
گزارش وضعیت ارتش (army-status
)
army-status
)این درخواست، یعنی میخواهیم تعداد افراد زنده به تفکیک سمتشان در ارتش، را در لحظهی <timestamp>
بدانیم.
- اگر اژدها در این لحظه کشته شده، پیام
game over
را چاپ کنید.
در غیراینصورت ۶ عدد صحیح که با یک فاصله از هم جدا شدهاند و هر کدام به ترتیبی که در بالا معرفی شدند، تعداد افراد زنده را در این لحظه را چاپ کنید. (هر فرد را مستقل از سمت یکبار بشمارید.)
گزارش وضعیت مالی (money-status
)
money-status
)این درخواست، یعنی میخواهیم وضعیت مالی را در لحظهی <timestamp>
بدانیم.
- اگر اژدها در این لحظه کشته شده، پیام
game over
را چاپ کنید.
در غیراینصورت تعداد سکههای ذخیره شده را در این لحظه چاپ کنید.
نکات
- هر درخواست در یک زمانی داده میشود که با
<timestamp>
نشان میدهیم. فرمت هر کدام به صورتmm:ss:xxx
است که یعنی اتفاق در دقیقهmm
، ثانیهss
و میلیثانیهxxx
اتفاق افتاد است. - تضمین میشود هیچ دو اتفاقی حتی سکه اضافه کردنها و صدمه زدنهایی که به تناوب تکرار میشوند، همزمان نباشد.
ورودی
در سطر اول ورودی، دو عدد صحیح و با یک فاصله داده میشود که به ترتیب نشاندهندهی تعداد درخواستها و جان اژدها است.
در سطر بعدی، در هر سطر یکی از دستوراتی که در صورت سوال گفته شده میآید.
تضمین میشود زمان همهی درخواستها از نظر زمانی مرتب هستند و هیچ دو اتفاقی حتی اتفاقهایی که به تناوب تکرار میشوند، همزمان رخ نمیدهد.
خروجی
خروجی سطر دارد و در هر سطر خروجی متناسب با درخواستها را به ترتیب چاپ کنید.
مثالها
ورودی نمونه ۱
خروجی نمونه ۱
همانطور که در سوال گفته شد؛ دولت بعد از شروع بازی هر ۲۰ ثانیه، ۱۸۰ سکه به ارتش کمک میکند. پس تا لحظهی قبل از ثانیه ۲۰، مقدار پول ارتش همان ۵۰۰ سکهای است که از ابتدا دارد و اولین لحظه بعد از ثانیه ۲۰، ۱۸۰ سکه به ارتش اضافه میشود.
در ۴ درخواست بعدی، در هر درخواست یک معدنکار به ارتش اضافه میشود. هر معدنکار برای استخدام ۱۵۰ سکه نیاز دارد. پس بعد از استخدام معدنکار ۴ام دیگر پول کافی برای استخدام معدنکار ۵ام در لحظهی ۲۹:۰۰۹ نداریم. اما در لحظهی ۳۰:۰۱۰، هر ۴ معدنکار ۱۰ ثانیه هست که مشغول به کار شدند و هر کدام ۱۰۰ سکه به ارتش اضافه کردهاند. پس میتوانیم در این لحظه یک معدنکار داشته باشیم.
ورودی نمونه ۲
خروجی نمونه ۲
ارسال پاسخ برای این سؤال