در پیامرسان ممد نام کاربران به صورت انگلیسی نوشته میشود همین موضوع باعث مشکلات فراوانی در تلفظ اسامی شده است. به عنوان مثال کلمهی mammad
ممکن است به چهار صورت «مَمَد»، «مامَد»، «مَماد» و «ماماد» خوانده شود. به طور دقیقتر در این سوال حروف صدادار در انگلیسی هر کدام ممکن است به دو حالت خوانده شوند.
کلمهای ۶ حرفی در ورودی داده میشود تشخیص دهید این کلمه را به چند صورت میتوان خواند.
در تنها خط ورودی کلمهای ۶ حرفی از حروف کوچک انگلیسی آمده است.
دقت کنید که کلمهی داده شده الزاماً معنادار نخواهد بود و صرفاً شامل حروف انگلیسی است.
در تنها خط خروجی تعداد روشهای خوانش این کلمه را خروجی دهید.
همانطور که در صورت سؤال گفته شد، کلمهی mammad
را میتوان به چهار روش «مَمَد»، «مامَد»، «مَماد» و «ماماد» خواند. در نتیجه پاسخ برابر با ۴ خواهد بود.
کلمهی anvari
را میتوان به هشت روش «آنواری»، «آنوار ای»، «آنوَری»، «آنوَر ای»، «اَنواری»، «اَنوار ای»، «اَنوَری» و «اَنوَر ای» خواند. در نتیجه پاسخ برابر با ۸ خواهد بود.
از آنجا که کلمهی داده شده، حرف صدادار ندارد، پس تنها به یک حالت میتوان آن را خواند.
سوباسا که از گلزنهای معروف زمان خودش بوده است، به یاد خاطرات گذشتهی خود تصمیم گرفت که دوستان خودش را جمع کند و بازی فوتبال دوستانهای ترتیب دهد. اما از آنجا که سوباسا تنها در گل زدن مهارت دارد، در شمارش گلهای زده شده دچار اشتباه شد!
سوباسا در مجموع گل به تیم حریف زده است و آنها را یادداشت کرده است و میداند که گل اُم در دقیقهی زده شده است. اما به دلیل اینکه تعداد بازیهای زیادی انجام داده است، زمان وقتهای اضافی را به خاطر نمیآورد!
او حدس میزند که نیمهی اول بازی، دقیقه و نیمهی دوم بازی دقیقه وقت اضافه داشته است. به طور دقیقتر، نیمهی اول بازی از دقیقهی تا (شامل خود این دقایق) و همچنین نیمهی دوم بازی از دقیقهی تا (شامل خود این دقایق) بوده است.
حال او میخواهد بداند که آیا ممکن است زمان وقتهای اضافی را درست حدس زده باشد. به عبارتی دیگر، آیا عددی مانند وجود دارد که گلهای تا ، به ترتیب زمانی در نیمهی اول و گلهای تا ، به ترتیب زمانی در نیمهی دوم زده شده باشند.
دقت کنید که گلی که سوباسا یادداشت کرده است، به ترتیب زمانی بودهاند. به عبارتی دیگر، گل اُم، پیش از گل اُم زده شده است و او صرفاً ممکن است در محاسبهی و اشتباه کرده باشد. همچنین دقت کنید که وقتهای اضافهی بازیای که سوباسا گلهای آن را یادداشت کرده است، الزاماً کمتر یا مساوی ۱۰ نیستند.
ورودی شامل دو خط است که در خط اول، به ترتیب اعداد و و آمده است و در خط بعدی، عدد آمده است که عدد نشاندهندهی است.
تضمین میشود ها متمایزاند و همچنین دنبالهی گلهای داده شده به ترتیب زمانی است (لزوماً صعودی نیست).
در صورتی که دنبالهی داده شده از زمان زدن گلها، دنبالهای معتبر بود، عبارت YES
را چاپ کنید و در غیر این صورت عبارت NO
را چاپ کنید.
میتوان گلهای اول و دوم را برای نیمهی اول و باقی گلها را برای نیمهی دوم در نظر گرفت، در نتیجه پاسخ YES
است.
میتوان گلهای اول و دوم را برای نیمهی اول و باقی گلها را برای نیمهی دوم در نظر گرفت، در نتیجه پاسخ YES
است.
از آنجا که گل دوم را نمیتوان برای نیمهی اول در نظر گرفت، پس باید برای نیمهی دوم در نظر گرفت، اما در این صورت ترتیب زمانی گل دوم و سوم رعایت نشده است و در نتیجه پاسخ NO
است.
از آنجا که گل ششم نه در نیمهی اول و نه در نیمهی دوم میتواند قرار بگیرد، پس پاسخ NO
است.
ممد کلمهی مشکوک دارد که معنی آنها را نمیداند، او میخواهد برای یافت معنی کلمات، شباهت دیگر کلمات را با آنها بسنجد. به همین جهت او بار کلمهای دلخواه در نظر میگیرد (نه لزوما از کلمات مشکوک) و تعداد کلمات مشکوک مشابه با آن را میشمارد. طبق تعریف او دو کلمه مشابهاند اگر حداقل یکی از شروط زیر را دارا باشند: (هر شرط باید مجزا بررسی شود و ترکیب کردن آنها مورد نظر نیست، به عنوان مثال نمیتوان ابتدا حرفها را بزرگ و کوچک کرد و سپس یک حرف حذف کرد. برای درک بهتر به کلمهی چهارم مثال نمونه توجه کنید)
abc
و ac
مشابهاند)abc
و axc
مشابهاند) AbC
و ABc
مشابهاند همچنین کلمهی abc
با خودش مشابه است)در خط اول ورودی و آمده که نشان دهندهی تعداد کلمات مشکوک و تعداد کلمات انتخابی است. در هر یک از خط بعدی یک کلمهی مشکوک آمده است. سپس در خط ام از خط بعدی کلمهی دلخواه ممد در بار ام آمده است.
تضمین میشود هر کلمه تنها از حروف بزرگ و کوچک انگلیسی تشکیل شده است. همچنین تضمین میشود طول هر کلمه حداکثر ۵۰ است.
در خط ام از خط خروجی تعداد کلمات مشکوک مشابه با کلمهی دلخواه ام را خروجی دهید.
کلمات مشکوک سه کلمهی اول یعنی hamKaran
، system
و systemi
هستند و باید تشابه باقی کلمات را با آنها بیابیم.
sstem
طبق شرط اول با system
مشابه است.hamKarani
طبق شرط اول با hamKaran
مشابه است.hamkaran
طبق شرط سوم با hamKaran
مشابه است.hamkarani
با هیچ یک مشابه نیست. (توجه کنید سه شرط مستقل هستند و هر کدام باید جداگانه بررسی شود)pYstem
با هیچ یک مشابه نیست.pystem
طبق شرط دوم با system
مشابه است.pystemi
طبق شرط دوم با systemi
مشابه است.systema
طبق شرط دوم با systemi
و طبق شرط اول با system
مشابه است.ممد میخواهد دیوار خانهاش را رنگ کند، دیوار او به صورت یک جدول است. برای این کار در هر مرحله سطل رنگی برمیدارد و یک زیر جدول مربعی از دیوار را با آن رنگ رنگآمیزی میکند. (ممکن است خانهای چندین بار رنگآمیزی شود) حال او کنجکاو شده که تعداد رنگهای مختلف روی دیوار را بیابد به او در یافتن این تعداد کمک کنید!
رنگ دو خانهی جدول متفاوت است اگر مجموعه رنگهایی که روی آن زده شده با هم متمایز باشد همچنین توجه کنید که رنگ هر سطل با رنگ باقی سطلها متفاوت است. برای درک بهتر به توضیحات مثال توجه کنید.
در خط اول ورودی به ترتیب ، و آمده که نشان دهندهی تعداد ردیفهای جدول، تعداد ستونهای جدول و تعداد سطلهای رنگی است که ممد استفاده میکند.
در خط ام از خط بعدی به ترتیب ، و آمده که نشان دهندهی شمارهی سطر و ستون خانهی بالا چپ مربع و طول ضلع آن است.
محدودیتها | نمره |
---|---|
۵۴ | |
بدون محدودیت | ۱۲۶ |
در تنها خط خروجی تعداد رنگهای مختلف روی دیوار را خروجی دهید.
شکل دیوار به صورت زیر است:
در هر خانه شماره سطلهایی که آن خانه توسطشان رنگ شده نوشته شده است. حال به ازای هر خانه رنگ آن را در نظر میگیریم (در واقع رنگ یک خانه مجموعه سطلهایی است که با آن رنگ شده) و مجموعههای مختلف ایجاد شده را میشماریم.
در این مثال رنگهای مختلف به صورت زیر است:
سامانه گلستان، یک سامانه بسیار قوی و کارآمد است که برای وضعیت تحصیلی دانشجوها و برگزاری و ثبت نام کلاسهای دانشجوها طراحی شده است.
هر دانشجو و هر استاد به محض ورود به دانشگاه در سامانه گلستان ثبت نام میکنند. در این سامانه مشخصات هر کدام وارد میشود. همچنین تعدادی کلاس در سامانه گلستان تعریف میشود. هر دانشجو میتواند در تعدادی از این کلاسها ثبت نام کند.
اساتید نمرات را در سامانه گلستان وارد میکنند و دانشجویان هم در این سامانه میتوانند نمرات خود را در این سامانه ببینند.
name
identical_num
entering_year
field
name
identical_num
field
name
class_id
field
professor
students
از شما میخواهیم تا به صورت مرحله به مرحله این سامانه را طراحی کنید. در واقع در پیاده سازی هر فاز از دستورات فاز قبلی هم استفاده خواهد شد.
register_student
در این درخواست یک دانشجو نام <name>
، کد ملی <identical_num>
، سال ورودی <entering_year>
، رشته تحصیلی <field>
خود را وارد می کند و اقدام به ثبت نام در سامانه گلستان میکند.
در صورتی که یک دانشجو یا استاد دیگر قبلاً با کد ملی (identical_num
) مشابه در سیستم ثبت نام کرده است پیام this identical number previously registered
را چاپ کنید.
بعد از ثبت نام با موفقیت پیام welcome to golestan
را چاپ کنید.
register_professor
در این درخواست یک استاد نام <name>
، کد ملی <identical_num>
، رشته تدریس <field>
خود را وارد میکند و اقدام به ثبت نام میکند.
در صورتی که یک دانشجو یا استاد دیگر قبلاً با کد ملی (identical_num
) مشابه در سیستم ثبت نام کرده است پیام this identical number previously registered
را چاپ کنید.
بعد از ثبت نام با موفقیت پیام welcome to golestan
را چاپ کنید.
make_class
در این درخواست یک کلاس با نام <name>
و کد درس <class_id>
برای رشته تحصیلی <field>
ایجاد میشود.
اگر این کد کلاس دیگری قبلاً استفاده شده است، پیام this class id previously used
را چاپ کنید.
در غیر این صورت پیام class added successfully
را چاپ کنید.
add_student
در این درخواست یک دانشجو با کد ملی <identical_num>
درخواست اضافه شدن به کلاس با کد <class_id>
را دارد.
invalid student
را چاپ کنید.invalid class
را چاپ کنید.<field>
این کلاس یکسان نیست پیام student field is not match
را چاپ کنید.student is already registered
را چاپ کنید.student added successfully to the class
را چاپ کنید.توجه کنید اگر چند خطا همزمان اتفاق افتاد، پیامها از بالا به پایین الویت دارند.
add_professor
در این درخواست یک استاد با کد ملی <identical_num>
میخواهد تدریس کلاس با کد <class_id>
را به عهده بگیرد.
invalid professor
را چاپ کنید.invalid class
را چاپ کنید.<field>
این کلاس یکسان نیست پیام professor field is not match
را چاپ کنید.this class has a professor
را چاپ کنید.professor added successfully to the class
را چاپ کنید.توجه کنید اگر چند خطا همزمان اتفاق افتاد، پیامها از بالا به پایین الویت دارند.
student_status
در صورتی که دانشجویی با کد ملی <identical_num>
وجود ندارد پیام invalid student
را چاپ کنید.
در غیر این صورت در یک سطر و با یک فاصله بین آنها به ترتیب نام دانشجو (student_name
)، سال ورودی (entering_year
)، رشته تحصیلی (field
) و
نام (name
) کلاسهایی که این دانشجو در آنها شرکت میکند را به ترتیب ثبت نام چاپ کنید. در صورتی که این دانشجو در هیچ کلاسی ثبت نام نکرده است هیچ چیزی چاپ نکنید.
professor_status
در صورتی که استادی با کد ملی <identical_num>
وجود ندارد پیام invalid professor
را چاپ کنید.
در غیر این صورت در یک سطر و با یک فاصله بین آنها به ترتیب نام استاد (professor_name
)، رشته تحصیلی (field
) و
نام (name
) کلاسهایی که این استاد در آنها تدریس میکند را به ترتیب ثبت نام چاپ کنید. در صورتی که این استاد تدریس هیچ کلاسی را به عهده نگرفته است هیچ چیزی چاپ نکنید.
class_status
در صورتی که چنین کلاسی برای این رشته وجود ندارد پیام invalid class
را چاپ کنید.
در غیر این صورت در یک سطر و با یک فاصله بین آنها به ترتیب نام (name
) استادی که در این کلاس تدریس میکند را چاپ کنید. در صورتی که هیچ استادی برای تدریس این کلاس وجود ندارد کلمه None
را به جای نام استاد، چاپ کنید.
سپس نام(name
) تمامی دانشجویان این کلاس را به ترتیبی که در این کلاس ثبت نام کردهاند را در یک سطر و با فاصله چاپ کنید. اگر هیچ دانشجویی وجود ندارد هیچ چیزی چاپ نکنید.
set_final_mark
در این درخواست استادی با کد ملی <professor_identical_num>
برای دانشجویی با کد ملی <student_identical_num>
در درسی با کد <class_id>
نمره پایان ترم <mark>
را ثبت میکند.
invalid professor
را چاپ کنید. invalid student
را چاپ کنید. invalid class
را چاپ کنید.professor class is not match
را چاپ کنید.student did not registered
را چاپ کنید.در صورتی که هیچ کدام از حالتهای بالا اتفاق نیفتد، نمره پایان ترم این دانشجو را برای این درس برابر <grade>
قرار دهید. اگر نمرهای قبلاً ثبت شده آن را به این نمره تغییر دهید. در نهایت پیام student final mark added or changed
را چاپ کنید.
تضمین میشود که <grade>
یک عدد صحیح بین تا (شامل هر دو) است.
توجه کنید اگر چند خطا همزمان اتفاق افتاد، پیامها از بالا به پایین الویت دارند.
mark_student
در این درخواست نمره دانشجو با کد ملی <identical_num>
برای درس با کد <class_id>
نمایش داده میشود.
invalid student
را چاپ کنید. invalid class
را چاپ کنید.student did not registered
را چاپ کنید.None
را چاپ کنید.در صورتی که هیچ کدام از حالتهای بالا اتفاق نیفتد، آخرین نمره ثبت شده این دانشجو را برای این درس چاپ کنید.
توجه کنید اگر چند خطا همزمان اتفاق افتاد، پیامها از بالا به پایین الویت دارند.
mark_list
در این درخواست لیست نمرات کلاس با کد <class_id>
نمایش داده میشود.
invalid class
را چاپ کنید.no professor
را چاپ کنید. no student
را چاپ کنید.در صورتی که هیچ کدام از حالتهای بالا اتفاق نیفتد به ترتیب دانشجوهایی که در کلاس ثبت نام کردهاند. نمره هر دانشجو را در یک سطر و با یک فاصله بین آنها چاپ کنید. اگر نمرهای برای یک دانشجو ثبت نشده به جای نمره آن کلمه None
را چاپ کنید.
توجه کنید اگر چند خطا همزمان اتفاق افتاد، پیامها از بالا به پایین الویت دارند.
average_mark_professor
در این درخواست میانگین نمرات ثبت شده توسط استادی با کدملی <identical_num>
نمایش داده میشود.
در صورتی که استادی با این کد ملی وجود ندارد پیام invalid professor
را چاپ کنید.
در غیر این صورت میانگین تمام نمراتی که این استاد برای تمام دانشجوها (در همه کلاسهایش) ثبت کرده است را به صورت یک عدد اعشاری با دقت دقیقاً دو رقم بعد از اعشار چاپ کنید.
اگر یک استاد برای یک دانشجو در یک کلاس نمرهای را تغییر دهد فقط نمره جدید در میانگین در نظر گرفته میشود.
در صورتی که این استاد هیچ نمرهای ثبت نکرده است کلمه None
را چاپ کنید.
منظور از میانگین نمرات ثبت شده برای یک استاد یعنی مجموع نمرات ثبت شده توسط این استاد تقسیم بر تعداد نمرات ثبت شده توسط این استاد.
average_mark_student
در این درخواست میانگین نمرات ثبت شده برای دانشجویی با کدملی <identical_num>
نمایش داده میشود.
در صورتی که دانشجویی با این کد ملی وجود ندارد پیام invalid student
را چاپ کنید.
در غیر این صورت میانگین تمام نمراتی که این دانشجو از تمام استادها (در همه کلاسهایش) دریافت کرده است را به صورت یک عدد اعشاری با دقت دقیقاً دو رقم بعد از اعشار چاپ کنید.
اگر یک استاد برای یک دانشجو در یک کلاس نمرهای را تغییر دهد فقط نمره جدید در میانگین در نظر گرفته میشود.
در صورتی که این دانشجو هیچ نمرهای دریافت نکرده است عبارت None
را چاپ کنید.
منظور از میانگین نمرات دریافت شده برای یک دانشجو یعنی مجموع نمرات دریافت شده این دانشجو تقسیم بر تعداد نمرات دریافت شده توسط این دانشجو.
top_student
در این درخواست نام دانشجویی که در رشته <field>
و ورودی سال <entering_year>
میانگین نمرات بیشتری دارد را چاپ کنید.
در صورتی که هیچ دانشجویی با این مشخصات وجود ندارد به جای نام آن کلمه None
را چاپ کنید.
در صورتی که چند دانشجو با این مشخصات وجود دارد و همگی میانگین نمره یکسانی دارند، نام دانشجویی را چاپ کنید که زودتر ثبت نام کرده است.
top_mark
در این درخواست بیشترین نمره ثبت شده برای دانشجوهای کلاس <class_id>
نمایش داده میشود.
در صورتی که چنین کلاسی وجود ندارد پیام invalid class
را چاپ کنید.
در صورتی که هیچ دانشجویی در این کلاس هیچ نمرهای دریافت نکرده است، کلمهNone
را چاپ کنید.
در غیر این صورت بیشترین نمره ثبت شده برای دانشجویان این کلاس را چاپ کنید.
در هر سطر از ورودی تعدادی از دستورات گفته شده میآید. تضمین میشود که تعداد این دستورات از بیشتر نخواهد بود.
برای نشان دادن پایان دستورات، بعد از آخرین سطر کلمه end
در یک خط ورودی داده میشود.
نمره دهی این سوال به این صورت است:
در هر سطر از خروجی پاسخ مناسب هر دستور را چاپ کنید.
میخواهیم دستگاه خودپردازی را شبیهسازی کنیم که عملیات مختلف را پیشتیبانی میکند. توضیحات هر عملیات در قسمت مربوطه آمده است.
REGISTER
)
یک یوزر با نام USERNAME
در زمان TIMESTAMP
در خودپرداز ثبتنام میکند.
USERNAME
ثبتنام کرده باشد، پیغام Duplicate User!
چاپ شود.Registered Successfully
چاپ شود.DEPOSIT
)
مقدار AMOUNT
واحد پول در زمان TIMESTAMP
به حساب یوزر با نام USERNAME
اضافه میگردد.
USERNAME
وجود نداشت، پیغام No Such User Found!
چاپ شود.USERNAME
پس از افزایش موجودی چاپ شود.WITHDRAW
)
مقدار AMOUNT
واحد پول در زمان TIMESTAMP
از حساب یوزر با نام USERNAME
کم میگردد و به ازای آن، به اندازهی AMOUNT
واحد پول، از اسکناسهای داخل خودپرداز کم میشود.
USERNAME
وجود نداشت، پیغام No Such User Found!
چاپ شود.AMOUNT
بیش از ۲۰۰ واحد پول بود، پیغام Maximum Amount Exceeded!
چاپ شود.USERNAME
کمتر از مقدار AMOUNT
بود، پیغام Not Enough Fund!
چاپ شود.Not Enough Banknotes!
چاپ شود.USERNAME
پس از برداشت از حساب چاپ شود.TRANSFER
)
مقدار AMOUNT
واحد پول در زمان TIMESTAMP
از حساب یوزر با نام SENDER_USERNAME
کم میگردد و دقیقاً یک ساعت پس از آن به حساب یوزر با نام RECEIVER_USERNAME
واریز میگردد.
TIMESTAMP
، یوزری با نام SENDER_USERNAME
و یا همچنین یوزری با نام RECEIVER_USERNAME
وجود نداشت، پیغام No Such User Found!
چاپ شود.AMOUNT
بیش از ۳۰۰۰ واحد پول بود، پیغام Maximum Amount Exceeded!
چاپ شود.SENDER_USERNAME
کمتر از AMOUNT
واحد پول بود، پیغام Not Enough Fund!
چاپ شود.SENDER_USERNAME
پس از انتقال موجودی چاپ شود.GET_BALANCE
)
در زمان TIMESTAMP
، موجودی حساب یوزر با نام USERNAME
را چاپ میکند و مقدار ۱۰ واحد پول از آن حساب کم میکند.
TIMESTAMP
، یوزری با نام USERNAME
وجود نداشت، پیغام No Such User Found!
چاپ شود.USERNAME
در هنگام اجرای عملیات کمتر از ۱۰ واحد پول بود، پیغام Not Enough Fund!
چاپ شود.USERNAME
پس از کم شدن ۱۰ واحد پول چاپ شود.ADD_BANKNOTE
)
در زمان TIMESTAMP
، به تعداد AMOUNT
اسکناس، هر یک به ارزش VALUE
به اسکناسهای داخل خودپرداز اضافه میگردد.
تضمین میشود مقدار VALUE
یکی از مقادیر ۱، ۵، ۱۰، ۵۰ و یا ۱۰۰ است.
DEPOSIT
، چیزی به اسکناسهای داخل دستگاه اضافه نمیشود.WITHDRAW
، دستگاه خودپرداز در صورت پرداخت اسکناس، کمترین تعداد اسکناس را تحویل میدهد.TIMESTAMP
ها به شکل YYYY/MM/DD-hh:mm:ss
است که در آن YYYY
، MM
، DD
، hh
، mm
و ss
به ترتیب نشاندهندهی سال، ماه، روز، ساعت، دقیقه و ثانیهی عملیات است. همچنین تمامی TIMESTAMP
ها مقداری معتبر دارند.USERNAME
ها، تنها شامل حروف کوچک انگلیسی و به طول حداکثر ۱۰ هستند.محدودیتها | نمره |
---|---|
در دستورات داده شده، تنها دستور REGISTER و DEPOSIT موجود است و همچنین، ترتیب TIMESTAMP ها در دستورات به صورت صعودی است (دستورات به ترتیب ورودی اجرا میشوند). |
۳۰ |
دستور WITHDRAW و ADD_BANKNOTE در لیست دستورات وجود ندارد. |
۹۰ |
دستور TRANSFER در لیست دستورات وجود ندارد. |
۹۰ |
بدون محدودیت | ۹۰ |
ورودی شامل حداکثر ۲۰۰ خط است. در خط اول، عدد آمده است که نشاندهندهی تعداد دستورات داده شده است. سپس در خط بعدی، در هر خط، یکی از دستورات معتبر آمده است.
تضمین میشود فرمت ورودی دستورات، مانند فرمت گفته شده است و همچنین هیچ دو عملیاتی TIMESTAMP
یکسان ندارند. (از جمله واریز به حساب در عملیات TRANSFER
)
به ازای هر دستور داده شده در ورودی، خروجی مناسب به آن را به ترتیب و در یک خط جداگانه چاپ کنید.