در یک واگن مترو دو ردیف صندلی روبروی هم داریم که هر ردیف شامل ۸ صندلی است. هر صندلی یا خالی است و یا کسی روی آن نشسته.
میدانیم اگر کسی روی صندلی شماره نشسته باشد فقط به روبروی خود، یعنی صندلی شماره ردیف مقابل نگاه میکند و اگر شخصی روی آن صندلی نشسته باشد باهم «چشم تو چشم» میشوند.
به شما وضعیت نشستن افراد داده میشود و از شما تعداد جفتهای چشم تو چشم در یک واگن را میخوایم.
ورودی در دو سطر و در هر سطر ۸ عدد صحیح که 0
یا 1
هستند با فاصله ورودی داده میشوند که وضعیت صندلیهای واگن را نشان میدهند. 0
نشان دهنده خالی بودن صندلی و 1
نشان دهنده خالی نبودن است.
در تنها سطر خروجی، یک عدد که نشان دهنده تعداد جفت افراد چشم تو چشم است را خروجی دهید.
در اینجا جفتهای ۱، ۲ و ۸ چشم تو چشم هستند. بنابراین پاسخ مسئله برابر ۳ است.
در اینجا جفتهای ۵ و ۶ چشم تو چشم هستند. بنابراین پاسخ مسئله برابر ۲ است.
نیازی نیست چک کنید شرایط گفته شده در ورودی برقرار است یا نه. توضیحات محدودیتها فقط برای آگاهی شما دربارهی تستها و محدودیتهای مسئله است و قطعاً در ورودیهای داده شده به برنامهی شما رعایت میشوند. پس نیازی نیست بنویسید:
شما میتوانید لابهلای دریافت ورودی، خروجی دهید. پس نیازی نیست ابتدا همهی ورودیها را دریافت کنید و در نهایت همهی خروجیها را چاپ کنید. مخصوصاً برای سوالاتی که باید به چندین سوال پاسخ دهید، میتوانید دو قسمت ورودی و خروجی را کاملاً مستقل در نظر بگیرید و مطمئن باشید تداخلی پیش نمیآید.
لطفاً از چاپ کردن موارد اضافه مثل please enter a number
برای دریافت ورودی پرهیز کنید. برای مثال در زبان پایتون نباید بنویسید:
برای زبانهایی مثل جاوا نباید در بالای کد شما آدرس پکیج داده شود. برای مثال در بالای کد خود نباید بنویسید:
Scanner
برای دریافت ورودی
در زبان جاوا، باید فقط یک شئ از جنس Scanner
تعریف کنید و همهی ورودیها را با آن دریافت کنید.
در شهر دایرهای یک میدان اصلی در مرکز شهر داریم و تعدادی خیابان وجود دارد. خیابانها دو نوع دارند:
در این شهر خیابان از نوع اول و خیابان از نوع دوم داریم. پس در مجموع تقاطع بوجود میآید. (میدان اصلی را هم یک تقاطع در نظر بگیرید.)
میدانیم تمام این خیابان یک طرفه است. یعنی فقط میتوان در یک جهت روی آنها حرکت کرد. اما جهت آنها لزوماً باهم یکسان نیست. به شما جهت خیابانها داده میشود و از شما میخواهیم بررسی کنید آیا در این شهر میتوان از هرتقاطی به هر تقاطع دیگری با عبور از خیابانها رفت یا خیر.
توجه کنید وقتی جهت یک خیابان مشخص میشود، از ابتدا تا انتها جهت آن به آن صورت است یعنی اگر تقاطعها آن را به چند قسمت تقسیم کند، در تمام آن قسمتها جهت همان چیزی است که در ورودی گفته شده.
برای بهتر متوجه شدن سوال، به نمونهها توجه کنید.
ورودی شامل دو عدد و با فاصله است که به ترتیب تعداد خیابانهای مستقیم و تعداد خیابانهای دایرهای را نشان میدهد.
سپس در خط بعد عدد 0
و یا 1
با فاصله میآیند که نشان دهنده جهت خیابانهای مستقیم است. 1
به معنی این که جهت خیابان از میدان شروع میشود و 0
به معنی این است که به سمت میدان میرود.
سپس در خط بعد عدد 0
و یا 1
با فاصله میآیند که نشان دهنده جهت خیابانهای دایرهای است. 1
به معنی این که جهت خیابان ساعتگرد است و 0
به معنی این است که جهت آن پادساعتگرد است.
در صورتی که شهر داده شده ویژگی مورد نظر را داشت YES
و در غیر اینصورت NO
را چاپ کنید. (به بزرگی و کوچکی حروف توجه کنید.)
در این شهر میتوان از هر تقاطعی به هر تقاطع دیگر رفت. پس پاسخ YES
است.
در این شهر نمیتوان از تقاطعهای دیگر به میدان اصلی رسید پس پاسخ NO
است.
به آجر که در یک ردیف کنار هم قرار گرفتهاند یک «لایه آجر» میگوییم. آجرها را به ترتیب با اعداد تا شمارهگذاری کنید. آجر ام یک عدد مثل دارد که «استحکام» آن را نشان میدهد.
به یک لایه آجر «مستحکم» میگوییم اگر دنبالهی یک دنباله غیرنزولی باشد یعنی باشد.
برای «مستحکم» کردن یک دیوار، در هر حرکت میتوانیم یک بازه از آجرها را انتخاب و سپس به «استحکام» تمام آنها واحد اضافه کند. ( در تمام مراحل ثابت است و به شما داده میشود.) یعنی میتوان دو عدد و که است را انتخاب کرد و وضعیت دنباله را به
تغییر داد.
کمترین تعداد حرکتی که نیاز داریم تا این «لایه آجر» مستحکم شود، را خروجی دهید یا بگویید مستحکم کردن این دیوار غیرممکن است.
برای ساختن یک ساختمان لایه آجر باید مستحکم شود. دنبالهی اولیه استحکام آجرها و مقدار برای هر لایه به شما داده میشود و از شما میخواهیم مسئله را برای هر لایه به صورت جداگانه حل کنید.
برای بهتر متوجه شدن سوال، نمونهها را مشاهده کنید.
در سطر اول ورودی، عدد صحیح و مثبت که تعداد لایههای آجر را نشان میدهد آمده است.
در سطر بعدی ورودی، به ترتیب به ازای هر لایه در ابتدا در یک سطر و نشاندهنده تعداد آجرهای آن لایه و مقدار استحکامی که در هر حرکت میتواند اضافه کند آمده است.
سپس در سطر بعدی به ترتیب عدد، نشان دهنده استحکام اولیهی آجرهای آن لایه آمده است. تعداد کل آجرها حداکثر است.
خروجی شما باید شامل سطر باشد. در هر سطر کمترین تعداد حرکتی را خروجی دهید که بتوان بعد از این تعداد حرکت استحکام آجرهای این لایه را غیرنزولی کرد. اگر انجام این کار ممکن نیست -1
چاپ کنید.
در مثال اول، آرایهی صعودی است و نیاز به هیچ عملیاتی ندارد. پس پاسخ مسئله برابر ۰ است.
در مثال دوم، آرایهی اولیه است و هر بار میتوانیم یک بازه را انتخاب کرده و واحد به آن اضافه کنیم. اگر دنبالهی حرکتها به صورت زیر باشد، بعد از ۹ حرکت به یک آرایه صعودی میرسیم.
در مثال سوم مقدار است، پس انجام عملیات، باعث تغییری در وضعیت آرایه نمیشود و هیچوقت نمیتوانیم آن را غیرنزولی کنیم.
در مثال چهارم آرایه اولیه تک عضوی است. پس غیرنزولی نیز هست.
یک قاب داریم که آن را شکستهایم. قطعات شکسته شده مستطیل هستند. یعنی قطعهی ام یک مستطیل است. میخواهیم آنها را کنار هم بگذاریم و یک قاب مربعی بسازیم. باید قطعات را موازی محورها قرار دهیم.
توجه کنید ممکن است یک قطعه را دوران ۹۰ درجه بدهیم ولی در نهایت باید موازی محورها شود. قطعات مستطیلها را یکسان در نظر بگیرید. برای بهتر متوجه شدن سوال به نمونهها توجه کنید.
در سطر اول ورودی، عدد صحیح و مثبت داده میشود که تعداد قطعات نشان میدهد.
در سطر بعدی، در هر سطر دو عدد صحیح و مثبت و داده میشود که عرض و ارتفاع یک قطعه را نشان میدهد.
در یک سطر، تعداد حالتهایی که این قطعات را در یک قاب مربعی موازی محورها بگذاریم را چاپ کنید.
در این سوال میخواهیم بخشی شبیه به سایت دیوار را طراحی کنیم. قرار است تعدادی کاربر در سایت ثبت نام کنند و هر کدام تعدادی آگهی روی این سایت قرار دهند. هر کاربر میتواند آگهی را به لیست علاقهمندیهایش اضافه کند. همچنین کاربری ممکن است بخواهد لیست آگهیهایی را که پست کرده یا به علاقهمندیهای خودش اضافه کرده را ببیند. به شما لیستی از دستورهای این سیستم داده میشود و از شما میخواهیم این دستورها را به درستی پاسخ دهید.
register
🔗فرم کلی این دستور به صورت register <username>
است و به معنی این است که یک کاربر با نام کاربری <username>
میخواهد در دیوار ثبت نام کند.
invalid username
را چاپ کنید.registered successfully
را چاپ کنید.add_advertise
🔗فرم کلی این دستور به صورت add_advertise <username> <title>
است و به معنی این است که کاربر <username>
میخواهد آگهی با عنوان <title>
را در دیوار منتشر کند.
invalid username
را چاپ کنید.invalid title
را چاپ کنید.posted successfully
را چاپ کنید.rem_advertise
🔗فرم کلی این دستور به صورت rem_advertise <username> <title>
است و به معنی این است که کاربر <username>
میخواهد آگهی با عنوان <title>
را که قبلاً در دیوار منتشر کرده را پاک کند.
invalid username
را چاپ کنید.invalid title
را چاپ کنید.access denied
را چاپ کنید.removed successfully
را چاپ کنید.list_my_advertises
🔗فرم کلی این دستور به صورت list_my_advertises <username>
است و به معنی این است که یک کاربر با نام کاربری <username>
میخواهد لیست آگهیهایی که منتشر کرده را مشاهده کند.
invalid username
را چاپ کنید.add_favorite
🔗فرم کلی این دستور به صورت add_favorite <username> <title>
است و به معنی این است که کاربر <username>
میخواهد آگهی با عنوان <title>
را به لیست علاقهمندیهایش اضافه کند.
invalid username
را چاپ کنید.invalid title
را چاپ کنید.already favorite
را چاپ کنید.added successfully
را چاپ کنید.rem_favorite
🔗فرم کلی این دستور به صورت rem_favorite <username> <title>
است و به معنی این است که کاربر <username>
میخواهد آگهی با عنوان <title>
را از لیست علاقهمندیهایش حذف کند.
invalid username
را چاپ کنید.invalid title
را چاپ کنید.already not favorite
را چاپ کنید.removed successfully
را چاپ کنید.list_favorite_advertises
🔗فرم کلی این دستور به صورت list_favorite_advertises <username>
است و به معنی این است که یک کاربر با نام کاربری <username>
میخواهد لیست آگهیهایی که به علاقهمندیهایش اضافه کرده را مشاهده کند.
invalid username
را چاپ کنید.add_advertise
🔗فرمت کلی این دستور به صورت add_advertise <username> <title> [<tag>]
خواهد بود و به معنی این است که کاربر <username>
میخواهد آگهی با عنوان <title>
را با برچسب <tag>
منتشر کند.
list_my_advertises
🔗فرم کلی این دستور به صورت list_my_advertises <username> [<tag>]
است و به معنی این است که یک کاربر با نام کاربری <username>
میخواهد لیست آگهیهایی که با برچسب <tag>
منتشر کرده را مشاهده کند.
توجه کنید اگر مانند فاز اول، همچین کوئری داده شد ولی <tag>
نداشت باید بدون در نظر گرفتن برچسبها همهی آگهیها را نشان دهید.
list_favorite_advertises
🔗فرم کلی این دستور به صورت list_favorite_advertises <username> [<tag>]
است و به معنی این است که یک کاربر با نام کاربری <username>
میخواهد لیست آگهیهایی که برچسب <tag>
را دارند و به علاقهمندیهایش اضافه کرده را مشاهده کند.
توجه کنید اگر مانند فاز اول، همچین کوئری داده شد ولی <tag>
نداشت باید بدون در نظر گرفتن برچسبها همهی آگهیها را نشان دهید.
<username>
یک رشته که نشاندهندهی «نام کاربری» است، داده میشود.<title>
یک رشته که نشاندهندهی «عنوان آگهی» است، داده میشود._
، حروف کوچک یا بزرگ انگلیسی است و طول آن حداکثر ۲۰ است.در سطر اول ورودی، عدد صحیح و مثبت داده میشود. در سطر بعدی، در هر سطر یک دستور داده میشود.
خروجی سطر دارد، در هر سطر پاسخ مناسب به هر دستور چاپ میشود.
برای کمک به دیباگ برنامهی شما، نام فایل تستی که به سوال کد داده شده، در اینجا آمده است.