احمد به تازگی در شرکتی که نخواسته اسم آن فاش شود استخدام شده است. وی در بخش بستهبندی کار میکند و کارش به این شکل است:
امروز احمد ایمیلی دریافت کرده که در آن گفته شده که باید از همین شنبه کارش را شروع کند و به شرکت بیاید. همچنین تعداد و ظرفیت بطریها و مقدارحجم مایع محرمانه نیز در ایمیل به او داده شده و این جمله نیز ذکر شده: "در صورتی که تا پایان امشب گزارش را نفرستید، اخراج میشوید!"
حال احمد در این دوراهی قرار گرفته که مسابقه امروز اسنپتریپ را بدهد یا گزارشش را برای شرکت بنویسد. از آنجایی که احمد اهل رقابت است، ترجیح میدهد مسابقه را بدهد و تعداد و ظرفیت بطریها و حجم مایع محرمانه را به شما میدهد تا شما برایش گزارش را بنویسید.
شما باید با دریافت تعداد بطریها و ظرفیت هرکدام و مقدار حجم مایع، بگویید میتوان این حجم از مایع را در بطریها ریخت یا نه، همچنین این را میدانیم که هر بطری در ابتدا خالی میباشد و حداکثر به میزان ظرفیتش میتواند مایع را ذخیره کند.
توجه کنید که لزومی ندارد بطریها به طور کامل پر شوند.
در خط اول ورودی به شما دو عدد و داده میشود که به ترتیب تعداد بطریها و حجم مایع محرمانه به لیتر میباشند. در خط بعدی از ورودی، در خط ام عدد میآید که بیانگر ظرفیت بطری ام به لیتر میباشد.
در صورتی که میتوان این حجم از مایع را در بطریها ریخت YES
و در غیراینصورت NO
را چاپ کنید.
احمد میتواند ۱ لیتر از مایع را در بطری شماره ۱ و ۲ لیتر باقیمانده را در بطری شماره ۲ بریزد.
احمد به دلیل خستگی زیاد، با دوستان خود به کوههای دور دست رفته است. وی که به گشتوگذار علاقهمند است، شروع به گردش در آن مکان میکند.
احمد ناگهان یک کتیبه سنگی را میبیند و به سمت آن میرود. در کنار آن کتیبه یک قفل تاریخی قرار دارد. در بالای کتیبه یک نوشته با این متن وجود دارد: "رمز قفل را حدس بزنید تا جاودانه شوید!" همچنین در کنار آن یک دستورالعمل و یک جدول وجود دارد که هر خانه آن .
و یا *
است. همچنین سطرهای این جدول از بالا به پایین بهترتیب با اعداد تا و ستونهای آن از چپ به راست به ترتیب با اعداد تا شمارهگذاری شدهاند و منظور از خانه ، خانهای است که در تقاطع سطر ام و ستون ام جدول وجود دارد.
در دستورالعمل گفته شده که شما در جدولی که روی کتیبه است باید تعداد الگوهای مانند را بشمارید و رمز قفل برابر با تعداد این الگوها میباشد. همچنین فقط یک فرصت برای وارد کردن رمز قفل دارید و در صورت اشتباه بودن رمز، دیگر نمیتوانید جاودانه شوید.
یک الگوی مانند در جدول متشکل از خانه افقی متوالی شامل *
و خانه عمودی متوالی شامل *
میباشد که پایینترین خانهی تکه عمودی و چپترین خانه تکه افقی با یکدیگر مشترک میباشند و یک شکل شبیه حرف انگلیسی تشکیل میدهند (یعنی دورانهای دیگر حرف شمرده نمیشوند).
همچنین ممکن است چند مختلف با یکدیگر دارای اشتراک باشند.
حال احمد به دلیل اینکه هیجانزده شده، نمیتواند تمرکز کند و برای همین جدول روی کتیبه را به شما میدهد تا شما برایش الگوهای مانند را بشمارید و به او بگویید.
در خط اول ورودی دو عدد و میآیند که به ترتیب بیانگر تعداد سطر و ستون جدول میباشند.
در امین خط از خط بعدی، یک رشته به طول متشکل از .
و *
داده میشود که امین عنصر آن برابر با مقدار خانه واقع در تقاطع سطر ام و ستون ام میباشد.
در تنها خط خروجی، تعداد الگوهای مانند را خروجی دهید.
تنها یک وجود دارد که شامل خانههای زیر میباشد:
دو وجود دارند که شامل خانههای زیر میباشند:
یک وجود دارد که شامل خانههای زیر میباشد:
احمد عمویی به اسم هوشنگ دارد که شخصیت مرموز او همواره برای احمد جالب توجه بوده است.
آقا هوشنگ دختر دارد که به ترتیب سن از کوچک به بزرگ، با ۱ تا شمارهگذاری شدهاند. دختران آقا هوشنگ دوست دارند هر چه سریعتر ازدواج کنند.
پدر آنها مشکلی با این ویژگی دخترانش ندارد ولی از آنجایی که میخواهد متفاوت باشد، شرطی برای ازدواج دخترانش گذاشته که یک دختر تنها زمانی میتواند ازدواج کند که همه دخترهای کوچکتر از او، ازدواج کرده باشند.
احمد میداند که خواستگار میخواهند به خواستگاری دختران آقا هوشنگ بیایند و هیچ دو تایی از آنها به دختر یکسانی علاقهمند نیستند. خواستگار ام به خواستگاری دختر ام آقا هوشنگ میرود.
از آنجایی که خانه آقا هوشنگ خیلی کوچک است، در هر روز فقط یک خواستگار میتواند بیاید و از یکی از دخترانش خواستگاری کند و جواب بله را بگیرد. اما این پایان کار نیست و هر دختری باید تا ازدواج کردن همه دختران کوچکتر از خود صبر کند (یعنی زمانی که همه دختران کوچکتر از او ازدواج کردند، آن دختر ازدواج میکند).
حال احمد میخواهد بداند که هر کدام از دختر عموهایش در چه روزی ازدواج میکنند تا برای آنها کادوی مناسب تدارک ببیند. از آنجایی که آقا هوشنگ خود عاقد است، هر کدام از ازدواجها تنها یک لحظه طول میکشد و بنابراین تعداد ازدواجهایی که در یک روز صورت میگیرد، محدودیتی ندارد.
در خط اول ورودی عدد آمده است که نشاندهنده تعداد دختر عموهای احمد میباشد. در امین خط از خط بعدی عدد آمده است که نشاندهنده سن دختری است که در روز ام از او خواستگاری میشود.
در امین خط از خط خروجی چاپ کنید که امین کوچکترین دختر آقا هوشنگ در روز چندم ازدواج میکند.
در روز اول برای دختر اول آقا هوشنگ خواستگار میآید و ازدواج میکند. در روز دوم برای دختر دوم خواستگار میآید و چون دختر اول ازدواج کرده است، دختر دوم در همین روز ازدواج میکند. در روز سوم نیز برای دختر سوم خواستگار میآید و چون دو دختر دیگر قبلا ازدواج کردهاند، دختر سوم در همین روز ازدواج میکند.
در روز اول برای دختر سوم آقا هوشنگ خواستگار میآید ولی چون هنوز دختر اول و دوم ازدواج نکردهاند، ازدواجی صورت نمیگیرد. در روز دوم برای دختر اول خواستگار میآید و او در همان روز ازدواج میکند. در روز سوم برای دختر دوم خواستگار میآید و او در همان روز ازدواج میکند، چون دختر اول پیش از آن ازدواج کرده است. همچنین دختر سوم هم که پیش از این منتظر ازدواج خواهران کوچکترش بود، در همین روز بعد از دختر دوم ازدواج میکند. در روز چهارم برای دختر چهارم خواستگار میآید و چون خواهران کوچکتر او ازدواج کردهاند، او هم در همین روز ازدواج میکند.
احمد مسئول برگزاری یک سری مسابقات سنگین شده است. او از این کار جدید خیلی خوشحال است ولی برگزاری چنین مسابقاتی خیلی سخت است و نیاز به یک برنامهنویس خبره برای نوشتن سیستم مدیریت آن دارد، برای همین او از شما میخواهد تا سیستمی طراحی کنید که این مسابقات را مدیریت کند.
مسابقات به این شکل برگزار میشود که در هر لحظه تعدادی بازیکن در مسابقات وجود دارند که میخواهند با یکدیگر بازی کنند. همچنین تعدادی درخواست بازی در هر زمان وجود دارد که در پایین توضیح داده میشود.
هر بازیکن یک قدرت () و یک جنبه، () دارد. اگر کسی تعداد بازیهایی که باخته است بیشتر از جنبهاش شود، از مسابقات انصراف میدهد. همچنین اگر کسی تقلب کند، از مسابقات حذف خواهد شد و به تبع آن، درخواستهایش نیز نادیده گرفته میشوند.
بازیها تنها با توافق طرفین انجام میشود، یعنی زمانی یک بازی شکل میگیرد که هر دو طرف راضی باشند که با حریفی با ویژگیهای فعلی رقابت کنند. نحوه ایجاد بازیها هم بدینگونه است که بازیکنها درخواست بازی میدهند و اگر شرایط لازم برای آن درخواست را داشتند، درخواستشان اجرا میشود و در غیر این صورت نادیده گرفته میشود.
اجرا شدن درخواستهای بازی به شکل زیر است:
میدانیم در بازی بازیکنهای و ، اگر قدرت بازیکن را و قدرت بازیکن را در نظر بگیریم، بازیکنی که زودتر درخواست بازی را داده است میبرد، اگر و تنها اگر، باقیمانده تقسیم عدد بر بزرگتر از باشد. در انتها نیز برنده بازی به اندازه قدرت بازیکن مقابل، امتیاز دریافت میکند و تغییری در امتیاز بازنده ایجاد نمیشود.
میدانیم هر دقیقهای که میگذرد، یک اتفاق جدید میافتد و نتیجه آن بر مسابقات در همان دقیقه اعمال میشود. در هر دقیقه از بازی یکی از اتفاقات زیر رخ میدهد:
بازیکنی به اسم ، با قدرت و جنبه به بازی اضافه میشود. دقت کنید که امتیاز هر بازیکن زمان اضافه شدن به بازی صفر است (اسمهای بازیکنها متمایز است).
کمیته مسابقات متوجه تقلب بازیکنی با نام میشود.
بازیکنی با نام درخواست بازی عمومی میکند، یعنی اگر شخص دیگری درخواستی داده که ، شامل شرایط آن میشود، با او بازی میکند.
بازیکنی با نام درخواست بازی با بازیکنی که امتیاز آن حداقل و حداکثر است را میکند. برای پیگیری این درخواست توسط کمیته مسابقات، این بازیکن باید حداقل ۵ امتیاز داشته باشد و پس از اجرای این درخواست هم ۲ امتیاز از این بازیکن کم میشود. (دقت کنید موقعی که درخواست پذیرفته میشود، امتیاز کسر نمیشود و زمانی که بازی انجام میشود، امتیاز موردنظر کسر میشود).
بازیکنی با نام درخواست بازی اختصاصی با بازیکنی به اسم را میکند. برای اینکه درخواست بازیکن پذیرفته شود، باید حداقل ۱۰ امتیاز داشته باشد و پس از اجرای این درخواست (انجام بازی)، ۳ امتیاز از بازیکن کسر میشود. میدانیم که وقتی این درخواست صورت میگیرد، بازیکنی با نام حتما در مسابقات حاضر است.
جدول ردهبندی را تا لحظه فعلی چاپ کنید، بدین شکل که ابتدا در یک خط عبارت scoreboard:
را چاپ کنید. سپس بازیکنها بر اساس اولویتهای زیر مرتب مرتب کنید و اسم آنها به ترتیب در خطوط جداگانه خروجی دهید:
به موارد زیر هم در هنگام پیادهسازی توجه کنید:
با ظاهر شدن عبارت start
در ورودی مسابقات شروع میشود. پس از شروع مسابقات، هر خط نشاندهنده بروز یکی از ۶ اتفاق ممکن در صورت سوال است. قالب اتفاقات مختلف به صورت زیر است (امین قالب مربوط به امین نوع اتفاق در بازی است):
add $s$ $g$ $k
$s$ cheats
$s$ competes everybody
$s$ competes between $l$ $r$
$s$ competes $t$
print scoreboard
تضمین میشود هر خط از ورودی دقیقا با یکی از قالبهای ارائه شده همخوانی دارد. همچنین اسامی بازیکنان تنها از حروف کوچک انگلیسی تشکیل شده است و همه اعداد نیز از صفر تا هزار هستند.
با ظاهر شدن عبارت end
ورودی پایان مییابد.
تعداد خطوط ورودی حداکثر هزارتاست.
به ازای هر بار درخواست شماره ۶، جدول ردهبندی را به صورت کامل چاپ کنید.
در ابتدا که هیچ شرکتکنندهای وجود ندارد.
پس از آن دو بازیکن به نامهای علی و احمد به مسابقات اضافه میشوند که قدرت آنها به ترتیب برابر ده و صفر میباشد و لذا احمد که قدرت کمتری دارد، در ردهبندی بالاتر است.
پس از آن احمد دو بار درخواست رقابت عمومی میدهد و درخواستهایش پذیرفته شده و داخل صف انتظار قرار میگیرند. سپس علی درخواست رقابت عمومی میدهد و این درخواست او با درخواست اول احمد مطابقت پیدا کرد و آن دو به رقابت پرداختند. در اینجا چون احمد در ابتدا درخواست داده بود و شرط گفته شده در صورت سوال برقرار نبود، علی برنده بازی میشود و چون جنبه احمد صفر است و تعداد باختهایش بیشتر از جنبهاش شده است، از مسابقات انصراف میدهد. البته با این برد، علی امتیاز خاصی به دست نمیآورد چون قدرت احمد برابر صفر بوده است. پس از آن علی یک بار دیگر درخواست بازی ارائه میدهد ولی چون درخواستی در صف انتظار وجود ندارد (درخواست احمد پس از حذف او از صف حذف شده است)، باید منتظر درخواست دیگری بماند.
حال بازیکنی جدید به نام عرفان و با قدرت صد به بازی اضافه میشود و درخواست یک بازی عمومی را میکند و چون درخواستش با درخواست علی مطابقت دارد، این دو وارد بازی میشوند. چون علی درخواستکننده اول بوده و همچنین شرط گفته شده در صورت سوال برقرار نیست، پس عرفان برنده بازی میشود و ده امتیاز به دست میآورد و در جدول ردهبندی در صدر قرار میگیرد.
حال عرفان یک درخواست بازی جدید ثبت میکند و چون امتیاز اون بیشتر مساوی پنج است، درخواستش به صف انتظار میرود ولی از آنجایی که پس از او فقط احمد درخواست میدهد و درخواستهای او توسط کمیته مسابقات نادیده گرفته میشوند، دیگر بازی صورت نمیگیرد و جدول ردهبندی مسابقات تا انتها ثابت میماند.
پرهام در تولید یک نرمافزار مسیریابی تصمیم گرفته است برای ذخیرهسازی فاصله بین شهرها از یک ماتریس استفاده کند. او در کلاس DistanceMap*، ماتریس *map را تعریف کرده که سطرهای آن شمارهی شهر مبدا، ستونهای آن شمارهی شهر مقصد و درایهی آن فاصله بین دو شهر متناظر را نشان میدهد.
شاید راه حل پرهام برای ذخیره فاصلهها، چندان مناسب نباشد اما به او کمک کنید در تکمیل نرمافزارش راه مناسبی برای یافتن دو شهری که بیشترین فاصله را از یکدیگر نسبت به باقی شهرها دارند پیدا کند.
فایل source را دانلود کنید.
متد main
در کلاس MaxDistanceCalculator
را به گونهای پیادهسازی کنید که با توجه به محتویات ماتریس map
در کلاس DistanceMap
، شمارهی دو شهری را که بیشترین فاصله را از یکدیگر دارند به دست آورده و در خروجی استاندارد چاپ کند.
map
حداکثر ۵ است.مثال اول
محتویات ماتریس map
:
خروجی:
مثال دوم
محتویات ماتریس map
:
خروجی:
آن چه که باید آپلود کنید
یک فایل زیپ که وقتی آن را باز میکنیم فقط فایل MaxDistanceCalculator.java
را ببینیم.
یکی از چالشهای امروزی در زمینهی شبکههای اجتماعی، شناسایی پیامهای اسپم (spam) میباشد. معمولا پیامها از نظر اسپم بودن در چهار دسته زیر طبقهبندی میشوند:
بسته spam را دانلود کنید.
متد detectSpams
در کلاس SpamDetector
را به گونهای پیادهسازی کنید که با دریافت آرایهای از Message
ها، آرایهای از SpamType
ها را برگرداند که هر عنصر آن نوع پیام متناظر در آرایهی messages
را مشخص میکند. به عبارتی اگر عنصر اول آرایهی messages
اسپم نباشد باید عنصر اول آرایهی برگشتی از نوع NOT_SPAM
باشد.
برای مثال با اجرای متد main در کلاس Main، باید خروجی زیر چاپ شود:
آن چه که باید آپلود کنید
یک فایل زیپ که وقتی آن را باز میکنیم فقط فایل SpamDetector.java
را ببینیم.
مهارتهای لازم:
JS
در این سوال قصد داریم برای دکمه هایی که از قبل تعریف شده اند عملکردی اضافه کنیم تا با کلیک بر روی هر کدام از آنها رنگ پس زمینه به همان رنگ دکمه تغییر پیدا کند. ظاهر کلی برنامه بدین صورت است:
پروژه اولیه را از اینجا دانلود کنید. ساختار فایلهای این پروژه به صورت زیر است.
تغییرات لازم را در فایل app.js
اعمال کنید.
مهارتهای لازم:
JS
میخواهیم با استفاده از جاوااسکریپت بر اساس یک لیستی از برخی استان های ایران ، یکAutocomplete
مطابق با شکل زیر پیاده سازی کنیم.
پروژه اولیه را از اینجا دانلود کنید. ساختار فایلهای این پروژه به صورت زیر است.
با شروع به تایپ کردن در input
یک لیستی از پیشنهادات برای کاربر ظاهر می شود با کلیک کردن بر روی هر کدام از آنها ،input
مقدار دهی می شود.تغییرات لازم را در فایل app.js
اعمال کنید.
div
با کلاس item
ساخته شوند.Not Found!
در یک عنصر با کلاس not-found
ساخته شود.input
به آن تغییر می کند.body
باید لیست ظاهر شده از بین برود.