کلمه کلمه


  • محدودیت زمان: ۱ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

در پیام‌رسان ممد نام کاربران به صورت انگلیسی نوشته می‌شود همین موضوع باعث مشکلات فراوانی در تلفظ اسامی شده است. به عنوان مثال کلمه‌ی mammad ممکن است به چهار صورت «مَمَد»، «مامَد»، «مَماد» و «ماماد» خوانده شود. به طور دقیق‌تر در این سوال حروف صدادار در انگلیسی (a,e,i,o,u)(a,e,i,o,u) هر کدام ممکن است به دو حالت خوانده شوند.

کلمه‌ای ۶ حرفی در ورودی داده می‌شود تشخیص دهید این کلمه را به چند صورت می‌توان خواند.

ورودی🔗

در تنها خط ورودی کلمه‌ای ۶ حرفی از حروف کوچک انگلیسی آمده است.

دقت کنید که کلمه‌ی داده شده الزاماً معنادار نخواهد بود و صرفاً شامل حروف انگلیسی است.

خروجی🔗

در تنها خط خروجی تعداد روش‌های خوانش این کلمه را خروجی دهید.

مثال🔗

ورودی نمونه ۱🔗

mammad
Plain text

خروجی نمونه ۱🔗

4
Plain text

همانطور که در صورت سؤال گفته شد، کلمه‌ی mammad را می‌توان به چهار روش «مَمَد»، «مامَد»، «مَماد» و «ماماد» خواند. در نتیجه پاسخ برابر با ۴ خواهد بود.

ورودی نمونه ۲🔗

anvari
Plain text

خروجی نمونه ۲🔗

8
Plain text

کلمه‌ی anvari را می‌توان به هشت روش «آنواری»، «آنوار ای»، «آنوَری»، «آنوَر ای»، «اَنواری»، «اَنوار ای»، «اَنوَری» و «اَنوَر ای» خواند. در نتیجه پاسخ برابر با ۸ خواهد بود.

ورودی نمونه ۳🔗

sghrwq
Plain text

خروجی نمونه ۳🔗

1
Plain text

از آنجا که کلمه‌ی داده شده، حرف صدادار ندارد، پس تنها به یک حالت می‌توان آن را خواند.

سوباسا و دوستان


  • محدودیت زمان: ۱ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

سوباسا که از گل‌زن‌های معروف زمان خودش بوده است، به یاد خاطرات گذشته‌ی خود تصمیم گرفت که دوستان خودش را جمع کند و بازی فوتبال دوستانه‌ای ترتیب دهد. اما از آنجا که سوباسا تنها در گل زدن مهارت دارد، در شمارش گل‌های زده شده دچار اشتباه شد!

سوباسا در مجموع nn گل به تیم حریف زده است و آن‌ها را یادداشت کرده است و می‌داند که گل iiاُم در دقیقه‌ی aia_i زده شده است. اما به دلیل اینکه تعداد بازی‌های زیادی انجام داده است، زمان وقت‌های اضافی را به خاطر نمی‌آورد!

او حدس می‌زند که نیمه‌ی اول بازی، aa دقیقه و نیمه‌ی دوم بازی bb دقیقه وقت اضافه داشته است. به طور دقیق‌تر، نیمه‌ی اول بازی از دقیقه‌ی 00 تا 45+a45 + a (شامل خود این دقایق) و همچنین نیمه‌ی دوم بازی از دقیقه‌ی 4545 تا 90+b90 + b (شامل خود این دقایق) بوده است.

حال او می‌خواهد بداند که آیا ممکن است زمان وقت‌های اضافی را درست حدس زده باشد. به عبارتی دیگر، آیا عددی مانند knk \le n وجود دارد که گل‌های 11 تا kk، به ترتیب زمانی در نیمه‌ی اول و گل‌های k+1k + 1 تا nn، به ترتیب زمانی در نیمه‌ی دوم زده شده باشند.

دقت کنید که nn گلی که سوباسا یادداشت کرده است، به ترتیب زمانی بوده‌اند. به عبارتی دیگر، گل iiاُم، پیش از گل i+1i + 1اُم زده شده است و او صرفاً ممکن است در محاسبه‌ی aa و bb اشتباه کرده باشد. همچنین دقت کنید که وقت‌های اضافه‌ی بازی‌ای که سوباسا گل‌های آن را یادداشت کرده است، الزاماً کمتر یا مساوی ۱۰ نیستند.

ورودی🔗

ورودی شامل دو خط است که در خط اول، به ترتیب اعداد nn و aa و bb آمده است و در خط بعدی، nn عدد آمده است که عدد ii نشان‌دهنده‌ی aia_i است. 1n1001 \le n \le 100 1a,b101 \le a, b \le 10 0ai1000 \le a_i \le 100

تضمین می‌شود aia_iها متمایزاند و همچنین دنباله‌ی گل‌های داده شده به ترتیب زمانی است (لزوماً صعودی نیست).

خروجی🔗

در صورتی که دنباله‌ی داده شده از زمان زدن گل‌ها، دنباله‌ای معتبر بود، عبارت YES را چاپ کنید و در غیر این صورت عبارت NO را چاپ کنید.

ورودی نمونه ۱🔗

4 2 4
4 45 48 93
Plain text

خروجی نمونه ۱🔗

YES
Plain text

می‌توان گل‌های اول و دوم را برای نیمه‌ی اول و باقی گل‌ها را برای نیمه‌ی دوم در نظر گرفت، در نتیجه پاسخ YES است.

ورودی نمونه ۲🔗

5 3 2
4 47 45 80 91
Plain text

خروجی نمونه ۲🔗

YES
Plain text

می‌توان گل‌های اول و دوم را برای نیمه‌ی اول و باقی گل‌ها را برای نیمه‌ی دوم در نظر گرفت، در نتیجه پاسخ YES است.

ورودی نمونه ۳🔗

4 2 2
4 48 45 80
Plain text

خروجی نمونه ۳🔗

NO
Plain text

از آنجا که گل دوم را نمی‌توان برای نیمه‌ی اول در نظر گرفت، پس باید برای نیمه‌ی دوم در نظر گرفت، اما در این صورت ترتیب زمانی گل دوم و سوم رعایت نشده است و در نتیجه پاسخ ‍NO است.

ورودی نمونه ۴🔗

6 3 2
8 48 45 70 81 94
Plain text

خروجی نمونه ۴🔗

NO
Plain text

از آنجا که گل ششم نه در نیمه‌ی اول و نه در نیمه‌ی دوم می‌تواند قرار بگیرد، پس پاسخ NO است.

رشته رشته


  • محدودیت زمان: ۱ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

ممد nn کلمه‌ی مشکوک دارد که معنی آن‌ها را نمی‌داند، او می‌خواهد برای یافت معنی کلمات، شباهت دیگر کلمات را با آن‌ها بسنجد. به همین جهت او kk بار کلمه‌ای دلخواه در نظر می‌گیرد (نه لزوما از کلمات مشکوک) و تعداد کلمات مشکوک مشابه با آن را می‌شمارد. طبق تعریف او دو کلمه مشابه‌اند اگر حداقل یکی از شروط زیر را دارا باشند: (هر شرط باید مجزا بررسی شود و ترکیب کردن آن‌ها مورد نظر نیست، به عنوان مثال نمی‌توان ابتدا حرف‌ها را بزرگ و کوچک کرد و سپس یک حرف حذف کرد. برای درک بهتر به کلمه‌ی چهارم مثال نمونه توجه کنید)

  • بتوان با حذف یک حرف از یکی از این کلمات به کلمه‌ی دیگر رسید. (برای مثال دو کلمه‌ی abc و ac مشابه‌‌اند)
  • بتوان با تغییر یک حرف از یکی از این کلمات به کلمه‌ی دیگر رسید. (برای مثال دو کلمه‌ی abc و axc مشابه‌اند)
  • بتوان با بزرگ یا کوچک کردن حرف‌های یک کلمه به کلمه‌ی دیگر رسید. (برای مثال دو کلمه‌ی AbC و ABc مشابه‌اند همچنین کلمه‌ی abc با خودش مشابه است)

ورودی🔗

در خط اول ورودی nn و kk آمده که نشان دهنده‌ی تعداد کلمات مشکوک و تعداد کلمات انتخابی است. 1n,k501 \le n, k \le 50 در هر یک از nn خط بعدی یک کلمه‌ی مشکوک آمده است. سپس در خط iiام از kk خط بعدی کلمه‌ی دلخواه ممد در بار iiام آمده است.

تضمین می‌شود هر کلمه تنها از حروف بزرگ و کوچک انگلیسی تشکیل شده است. همچنین تضمین می‌شود طول هر کلمه حداکثر ۵۰ است.

خروجی🔗

در خط iiام از kk خط خروجی تعداد کلمات مشکوک مشابه با کلمه‌ی دلخواه iiام را خروجی دهید.

مثال🔗

ورودی نمونه ۱🔗

3 8
hamKaran
system
systemi
sstem
hamKarani
hamkaran
hamkarani
pYstem
pystem
pystemi
systema
Plain text

خروجی نمونه ۱🔗

1
1
1
0
0
1
1
2
Plain text

کلمات مشکوک سه کلمه‌ی اول یعنی hamKaran، system و systemi هستند و باید تشابه باقی کلمات را با آن‌ها بیابیم.

  • کلمه‌ی sstem طبق شرط اول با system مشابه است.
  • کلمه‌ی hamKarani طبق شرط اول با hamKaran مشابه است.
  • کلمه‌ی hamkaran طبق شرط سوم با hamKaran مشابه است.
  • کلمه‌ی hamkarani با هیچ یک مشابه نیست. (توجه کنید سه شرط مستقل هستند و هر کدام باید جداگانه بررسی شود)
  • کلمه‌ی pYstem با هیچ یک مشابه نیست.
  • کلمه‌ی pystem طبق شرط دوم با system مشابه است.
  • کلمه‌ی pystemi طبق شرط دوم با systemi مشابه است.
  • کلمه‌ی systema طبق شرط دوم با systemi و طبق شرط اول با system مشابه است.

نقاشی


  • محدودیت زمان: ۱ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

ممد می‌خواهد دیوار خانه‌اش را رنگ کند، دیوار او به صورت یک جدول n×mn \times m است. برای این کار در هر مرحله سطل رنگی برمی‌دارد و یک زیر جدول مربعی از دیوار را با آن رنگ رنگ‌آمیزی می‌کند. (ممکن است خانه‌ای چندین بار رنگ‌آمیزی شود) حال او کنجکاو شده که تعداد رنگ‌های مختلف روی دیوار را بیابد به او در یافتن این تعداد کمک کنید!

رنگ دو خانه‌ی جدول متفاوت است اگر مجموعه رنگ‌هایی که روی آن زده شده با هم متمایز باشد همچنین توجه کنید که رنگ هر سطل با رنگ باقی سطل‌ها متفاوت است. برای درک بهتر به توضیحات مثال توجه کنید.

ورودی🔗

در خط اول ورودی به ترتیب nn، mm و kk آمده که نشان دهنده‌ی تعداد ردیف‌های جدول، تعداد ستون‌های جدول و تعداد سطل‌های رنگی است که ممد استفاده می‌کند.

1n,m,k50 1 \le n,m,k \le 50

در خط iiام از kk خط بعدی به ترتیب rir_i، cic_i و lil_i آمده که نشان دهنده‌ی شماره‌ی سطر و ستون خانه‌ی بالا چپ مربع و طول ضلع آن است.

1rin 1 \le r_i \le n 1cim 1 \le c_i \le m 1ri+li1n 1 \le r_i + l_i - 1 \le n 1ci+li1m 1 \le c_i + l_i - 1 \le m 1limin(n,m) 1 \le l_i \le \min(n, m)

زیرمسئله‌ها🔗

محدودیت‌ها نمره
1k20 1 \le k \le 20 ۵۴
بدون محدودیت ۱۲۶

خروجی🔗

در تنها خط خروجی تعداد رنگ‌های مختلف روی دیوار را خروجی دهید.

مثال🔗

ورودی نمونه ۱🔗

5 5 3
1 1 3
2 2 4
1 3 3
Plain text

خروجی نمونه ۱🔗

7
Plain text

شکل دیوار به صورت زیر است: توضیح مثال ۱ در هر خانه شماره سطل‌هایی که آن خانه توسط‌شان رنگ شده نوشته شده است. حال به ازای هر خانه رنگ آن را در نظر می‌گیریم (در واقع رنگ یک خانه مجموعه سطل‌هایی است که با آن رنگ شده) و مجموعه‌های مختلف ایجاد شده را میشماریم. {1},{2},{3},{1,2},{1,3},{2,3},{1,2,3}\{1\}, \{2\}, \{3\}, \{1,2\}, \{1,3\}, \{2,3\}, \{1, 2, 3\}

ورودی نمونه ۲🔗

3 4 3
1 1 1
2 2 2
1 3 2
Plain text

خروجی نمونه ۲🔗

4
Plain text

توضیح مثال ۲ در این مثال رنگ‌های مختلف به صورت زیر است: {1},{2},{3},{2,3} \{1\}, \{2\}, \{3\}, \{2,3\}

گلستان


  • محدودیت زمان: ۱ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

سامانه گلستان، یک سامانه بسیار قوی و کارآمد است که برای وضعیت تحصیلی دانشجوها و برگزاری و ثبت نام کلاس‌های دانشجوها طراحی شده است.

هر دانشجو و هر استاد به محض ورود به دانشگاه در سامانه گلستان ثبت نام می‌کنند. در این سامانه مشخصات هر کدام وارد می‌شود. همچنین تعدادی کلاس در سامانه گلستان تعریف می‌شود. هر دانشجو می‌تواند در تعدادی از این کلاس‌ها ثبت نام کند.

اساتید نمرات را در سامانه گلستان وارد می‌کنند و دانشجویان هم در این سامانه می‌توانند نمرات خود را در این سامانه ببینند.

دانشجو
  • اسم name
    • یک رشته به طول حداقل 11 و حداکثر 2020 از حروف کوچک انگلیسی است.
  • کد ملی identical_num
    • یک رشته 1010 رقمی از ارقام 00 تا 99 است.
  • سال ورودی entering_year
    • یک عدد صحیح بین 13001300 تا 15001500 است. (شامل دو سر بازه)
  • رشته تحصیلی field
    • یک رشته به طول حداقل 11 و حداکثر 2020 از حروف کوچک انگلیسی است.
استاد
  • اسم name
    • یک رشته طول حداقل 11 و حداکثر 2020 از حروف کوچک انگلیسی است.
  • کد ملی identical_num
    • یک رشته 1010 رقمی از ارقام 00 تا 99 است.
  • رشته تحصیلی field
    • یک رشته به طول حداقل 11 و حداکثر 2020 از حروف کوچک انگلیسی است.
کلاس
  • اسم name
    • یک رشته به طول حداقل 11 و حداکثر 2020 از حروف کوچک انگلیسی است.
  • کد کلاس class_id
    • یک رشته 1010 رقمی از ارقام 00 تا 99 است.
  • رشته field
    • یک رشته به طول حداقل 11 و حداکثر 2020 از حروف کوچک انگلیسی است.
  • استاد professor
    • یک استاد برای تدریس این درس است.
  • دانشجویان students
    • یک لیست از دانشجویانی که این درس را می‌آموزند است.

از شما می‌خواهیم تا به صورت مرحله به مرحله این سامانه را طراحی کنید. در واقع در پیاده سازی هر فاز از دستورات فاز قبلی هم استفاده خواهد شد.

فاز اوّل
درخواست register_student
register_student <name> <identical_num> <entering_year> <field>
Plain text

در این درخواست یک دانشجو نام <name>، کد ملی <identical_num>، سال ورودی <entering_year>، رشته تحصیلی <field> خود را وارد می کند و اقدام به ثبت نام در سامانه گلستان می‌کند.

در صورتی که یک دانشجو یا استاد دیگر قبلاً با کد ملی (identical_num) مشابه در سیستم ثبت نام کرده است پیام this identical number previously registered را چاپ کنید.

بعد از ثبت نام با موفقیت پیام welcome to golestan را چاپ کنید.

درخواست register_professor
register_professor <name> <identical_num> <field>
Plain text

در این درخواست یک استاد نام <name>، کد ملی <identical_num>، رشته تدریس <field> خود را وارد می‌کند و اقدام به ثبت نام می‌کند.

در صورتی که یک دانشجو یا استاد دیگر قبلاً با کد ملی (identical_num) مشابه در سیستم ثبت نام کرده است پیام this identical number previously registered را چاپ کنید.

بعد از ثبت نام با موفقیت پیام welcome to golestan را چاپ کنید.

درخواست make_class
make_class <name> <class_id> <field>
Plain text

در این درخواست یک کلاس با نام <name> و کد درس <class_id> برای رشته تحصیلی <field> ایجاد می‌شود.

اگر این کد کلاس دیگری قبلاً استفاده شده است، پیام this class id previously used را چاپ کنید.

در غیر این صورت پیام class added successfully را چاپ کنید.

فاز دوم
درخواست add_student
add_student <identical_num> <class_id>
Plain text

در این درخواست یک دانشجو با کد ملی <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
add_professor <identical_num> <class_id>
Plain text

در این درخواست یک استاد با کد ملی <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
student_status <identical_num>
Plain text

در صورتی که دانشجویی با کد ملی <identical_num> وجود ندارد پیام invalid student را چاپ کنید.

در غیر این صورت در یک سطر و با یک فاصله بین آن‌ها به ترتیب نام دانشجو (student_name)، سال ورودی (entering_year)، رشته تحصیلی (field) و

نام (name) کلاس‌هایی که این دانشجو در آن‌ها شرکت می‌کند را به ترتیب ثبت نام چاپ کنید. در صورتی که این دانشجو در هیچ کلاسی ثبت نام نکرده است هیچ چیزی چاپ نکنید.

درخواست professor_status
professor_status <identical_num>
Plain text

در صورتی که استادی با کد ملی <identical_num> وجود ندارد پیام invalid professor را چاپ کنید.

در غیر این صورت در یک سطر و با یک فاصله بین آن‌ها به ترتیب نام استاد (professor_name)، رشته تحصیلی (field) و

نام (name) کلاس‌هایی که این استاد در آن‌ها تدریس می‌کند را به ترتیب ثبت نام چاپ کنید. در صورتی که این استاد تدریس هیچ کلاسی را به عهده نگرفته است هیچ چیزی چاپ نکنید.

درخواست class_status
class_status <class_id>
Plain text

در صورتی که چنین کلاسی برای این رشته وجود ندارد پیام invalid class را چاپ کنید.

در غیر این صورت در یک سطر و با یک فاصله بین آن‌ها به ترتیب نام (name) استادی که در این کلاس تدریس می‌کند را چاپ کنید. در صورتی که هیچ استادی برای تدریس این کلاس وجود ندارد کلمه None را به جای نام استاد، چاپ کنید.

سپس نام(name) تمامی دانشجویان این کلاس را به ترتیبی که در این کلاس ثبت نام کرده‌اند را در یک سطر و با فاصله چاپ کنید. اگر هیچ دانشجویی وجود ندارد هیچ چیزی چاپ نکنید.

فاز سوم
درخواست set_final_mark
set_final_mark <professor_identical_num> <student_identical_num> <class_id> <mark>
Plain text

در این درخواست استادی با کد ملی <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> یک عدد صحیح بین 00 تا 2020 (شامل هر دو) است.

توجه کنید اگر چند خطا همزمان اتفاق افتاد، پیام‌ها از بالا به پایین الویت دارند.

درخواست mark_student
mark_student <identincal_num> <class_id> 
Plain text

در این درخواست نمره دانشجو با کد ملی <identical_num> برای درس با کد <class_id> نمایش داده می‌شود.

  • در صورتی که دانشجویی با این کد ملی وجود ندارد پیام invalid student را چاپ کنید.
  • در صورتی که کلاسی با این کد وجود ندارد پیام invalid class را چاپ کنید.
  • در صورتی که این دانشجو در این کلاس ثبت نام نکرده است پیام student did not registered را چاپ کنید.
  • در صورتی که هیچ نمره‌ای برای این درس هنوز ثبت نشده است کلمه None را چاپ کنید.

در صورتی که هیچ کدام از حالت‌های بالا اتفاق نیفتد، آخرین نمره ثبت شده این دانشجو را برای این درس چاپ کنید.

توجه کنید اگر چند خطا همزمان اتفاق افتاد، پیام‌ها از بالا به پایین الویت دارند.

درخواست mark_list
mark_list <class_id>
Plain text

در این درخواست لیست نمرات کلاس با کد <class_id> نمایش داده می‌شود.

  • در صورتی که کلاسی با این کد کلاس وجود ندارد پیام invalid class را چاپ کنید.
  • در صورتی که استادی برای این کلاس وجود ندارد پیام no professor را چاپ کنید.
  • در صورتی که این کلاس هیچ دانشجویی ندارد پیام no student را چاپ کنید.

در صورتی که هیچ کدام از حالت‌های بالا اتفاق نیفتد به ترتیب دانشجوهایی که در کلاس ثبت نام کرده‌اند. نمره هر دانشجو را در یک سطر و با یک فاصله بین آن‌ها چاپ کنید. اگر نمره‌ای برای یک دانشجو ثبت نشده به جای نمره آن کلمه None را چاپ کنید.

توجه کنید اگر چند خطا همزمان اتفاق افتاد، پیام‌ها از بالا به پایین الویت دارند.

درخواست average_mark_professor
average_mark_professor <identical_num>
Plain text

در این درخواست میانگین نمرات ثبت شده توسط استادی با کدملی <identical_num> نمایش داده می‌شود.

در صورتی که استادی با این کد ملی وجود ندارد پیام invalid professor را چاپ کنید.

در غیر این صورت میانگین تمام نمراتی که این استاد برای تمام دانشجوها (در همه کلاس‌هایش) ثبت کرده است را به صورت یک عدد اعشاری با دقت دقیقاً دو رقم بعد از اعشار چاپ کنید.

اگر یک استاد برای یک دانشجو در یک کلاس نمره‌ای را تغییر دهد فقط نمره جدید در میانگین در نظر گرفته می‌شود.

در صورتی که این استاد هیچ نمره‌ای ثبت نکرده است کلمه None را چاپ کنید.

منظور از میانگین نمرات ثبت شده برای یک استاد یعنی مجموع نمرات ثبت شده توسط این استاد تقسیم بر تعداد نمرات ثبت شده توسط این استاد.

درخواست average_mark_student
average_mark_student <identincal_num>
Plain text

در این درخواست میانگین نمرات ثبت شده برای دانشجویی با کدملی <identical_num> نمایش داده می‌شود.

در صورتی که دانشجویی با این کد ملی وجود ندارد پیام invalid student را چاپ کنید.

در غیر این صورت میانگین تمام نمراتی که این دانشجو از تمام استادها (در همه کلاس‌هایش) دریافت کرده است را به صورت یک عدد اعشاری با دقت دقیقاً دو رقم بعد از اعشار چاپ کنید.

اگر یک استاد برای یک دانشجو در یک کلاس نمره‌ای را تغییر دهد فقط نمره جدید در میانگین در نظر گرفته می‌شود.

در صورتی که این دانشجو هیچ نمره‌ای دریافت نکرده است عبارت None را چاپ کنید.

منظور از میانگین نمرات دریافت شده برای یک دانشجو یعنی مجموع نمرات دریافت شده این دانشجو تقسیم بر تعداد نمرات دریافت شده توسط این دانشجو.

درخواست top_student
top_student <field> <entering_year>
Plain text

در این درخواست نام دانشجویی که در رشته <field> و ورودی سال <entering_year> میانگین نمرات بیشتری دارد را چاپ کنید.

در صورتی که هیچ دانشجویی با این مشخصات وجود ندارد به جای نام آن کلمه None را چاپ کنید.

در صورتی که چند دانشجو با این مشخصات وجود دارد و همگی میانگین نمره یکسانی دارند، نام دانشجویی را چاپ کنید که زودتر ثبت نام کرده است.

درخواست top_mark
top_mark <class_id>
Plain text

در این درخواست بیشترین نمره ثبت شده برای دانشجوهای کلاس <class_id> نمایش داده می‌شود.

در صورتی که چنین کلاسی وجود ندارد پیام invalid class را چاپ کنید.

در صورتی که هیچ دانشجویی در این کلاس هیچ نمره‌ای دریافت نکرده است، کلمهNone را چاپ کنید.

در غیر این صورت بیشترین نمره ثبت شده برای دانشجویان این کلاس را چاپ کنید.

ورودی🔗

در هر سطر از ورودی تعدادی از دستورات گفته شده می‌آید. تضمین می‌شود که تعداد این دستورات از 200200 بیشتر نخواهد بود.

برای نشان دادن پایان دستورات، بعد از آخرین سطر کلمه end در یک خط ورودی داده می‌شود.

نمره دهی این سوال به این صورت است:

  • فاز اول 2525 امتیاز
  • فاز دوم 100100 امتیاز
  • فاز سوم 125125 امتیاز

خروجی🔗

در هر سطر از خروجی پاسخ مناسب هر دستور را چاپ کنید.

مثال🔗

ورودی نمونه ۱🔗

register_student ali 0012233445 1398 software
register_student alireza 0012233445 1397 cs
register_student erfan 0043332227 1400 software
register_professor ahmadi 0014433225 software
make_class riaziyek 9876543210 math
make_class riaziyek 5552255522 software
add_student 0012233444 5552255522
add_student 0012233445 5552255522
add_professor 0014433225 5552255522
student_status 0012233445
add_student 0043332227 9876543210
add_student 0043332227 5552255522
student_status 0043332227
professor_status 0014433225
class_status 5552255522
set_final_mark 0014433225 0012233445 5552255522 18
mark_student 0012233445 5552255522
mark_student 0043332227 5552255522
set_final_mark 0014433225 0043332227 5552255522 19
mark_student 0012233445 5552255522
mark_student 0043332227 5552255522
mark_list 5552255522
top_mark 5552255522
top_student software 1398
top_student software 1401
end
Plain text

خروجی نمونه ۱🔗

welcome to golestan
this identical number previously registered
welcome to golestan
welcome to golestan
class added successfully
class added successfully
invalid student
student added successfully to the class
professor added successfully to the class
ali 1398 software riaziyek 
student field is not match
student added successfully to the class
erfan 1400 software riaziyek 
ahmadi software riaziyek 
ahmadi ali erfan 
student final mark added or changed
18
None
student final mark added or changed
18
19
18 19 
19
ali
None
Plain text

ورودی نمونه ۲🔗

register_student karimi 0023333334 1405 math
register_professor hajjarian 9987777776 math
register_professor azari 8876666665 math
make_class adadi 6222816098 math
make_class jabr 6222816099 math
add_professor 9987777776 6222816098
add_professor 8876666665 6222816099
add_professor 9987777776 6222816099
add_student 0023333334 6222816098
add_student 0023333334 6222816099
set_final_mark 9987777776 0023333334 6222816098 19
set_final_mark 9987777776 0023333334 6222816099 18
set_final_mark 8876666665 0023333334 6222816099 17
set_final_mark 8876666665 0023333334 6222816099 13
set_final_mark 9987777776 0023333334 6222816098 11
average_mark_professor 9987777776
average_mark_professor 8876666665
average_mark_student 0023333334
mark_list 6222816098
mark_list 6222816099
student_status 0023333334
professor_status 9987777776
professor_status 8876666665
class_status 6222816098
class_status 6222816099
end
Plain text

خروجی نمونه ۲🔗

welcome to golestan
welcome to golestan
welcome to golestan
class added successfully
class added successfully
professor added successfully to the class
professor added successfully to the class
this class has a professor
student added successfully to the class
student added successfully to the class
student final mark added or changed
professor class is not match
student final mark added or changed
student final mark added or changed
student final mark added or changed
11.00
13.00
12.00
11 
13 
karimi 1405 math adadi jabr 
hajjarian math adadi 
azari math jabr 
hajjarian karimi 
azari karimi 
Plain text

دستگاه خودپرداز


  • محدودیت زمان: ۱ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

می‌خواهیم دستگاه خودپردازی را شبیه‌سازی کنیم که عملیات مختلف را پیشتیبانی می‌کند. توضیحات هر عملیات در قسمت مربوطه آمده است.

ثبت‌نام (REGISTER)

فرمت ورودی🔗

REGISTER USERNAME TIMESTAMP
Plain text

توضیحات🔗

یک یوزر با نام USERNAME در زمان TIMESTAMP در خودپرداز ثبت‌نام می‌کند.

خروجی🔗

  • در صورتی که در زمان ثبت‌نام، یوزری با نام USERNAME ثبت‌نام کرده باشد، پیغام Duplicate User! چاپ شود.
  • در غیر این صورت، پیغام Registered Successfully چاپ شود.
واریز به حساب (DEPOSIT)

فرمت ورودی🔗

DEPOSIT USERNAME AMOUNT TIMESTAMP
Plain text

توضیحات🔗

مقدار AMOUNT واحد پول در زمان TIMESTAMP به حساب یوزر با نام USERNAME اضافه می‌گردد.

خروجی🔗

  • در صورتی که در زمان افزایش موجودی، یوزری با نام USERNAME وجود نداشت، پیغام No Such User Found! چاپ شود.
  • در غیر این صورت، موجودی حساب یوزر با نام USERNAME پس از افزایش موجودی چاپ شود.
برداشت از حساب (WITHDRAW)

فرمت ورودی🔗

WITHDRAW USERNAME AMOUNT TIMESTAMP
Plain text

توضیحات🔗

مقدار AMOUNT واحد پول در زمان TIMESTAMP از حساب یوزر با نام USERNAME کم می‌گردد و به ازای آن، به اندازه‌ی AMOUNT واحد پول، از اسکناس‌های داخل خودپرداز کم می‌شود.

خروجی🔗

  • در صورتی که در زمان برداشت از حساب، یوزری با نام USERNAME وجود نداشت، پیغام No Such User Found! چاپ شود.
  • در صورتی که مقدار AMOUNT بیش از ۲۰۰ واحد پول بود، پیغام Maximum Amount Exceeded! چاپ شود.
  • در صورتی که در زمان برداشت از حساب، موجودی حساب با نام USERNAME کمتر از مقدار AMOUNT بود، پیغام Not Enough Fund! چاپ شود.
  • در صورتی که با اسکناس‌های داخل دستگاه نمی‌توانستیم مقدار خواسته شده را پرداخت کنیم، پیغام Not Enough Banknotes! چاپ شود.
  • در غیر این صورت، موجودی حساب یوزر با نام USERNAME پس از برداشت از حساب چاپ شود.
انتقال موجودی (TRANSFER)

فرمت ورودی🔗

TRANSFER SENDER_USERNAME RECEIVER_USERNAME AMOUNT TIMESTAMP
Plain text

توضیحات🔗

مقدار 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)

فرمت ورودی🔗

GET_BALANCE USERNAME TIMESTAMP
Plain text

توضیحات🔗

در زمان TIMESTAMP، موجودی حساب یوزر با نام USERNAME را چاپ می‌کند و مقدار ۱۰ واحد پول از آن حساب کم می‌کند.

خروجی🔗

  • در صورتی که در زمان TIMESTAMP، یوزری با نام USERNAME وجود نداشت، پیغام No Such User Found! چاپ شود.
  • در صورتی که موجودی حساب یوزر با نام USERNAME در هنگام اجرای عملیات کمتر از ۱۰ واحد پول بود، پیغام Not Enough Fund! چاپ شود.
  • در غیر این صورت، موجودی حساب یوزر با نام USERNAME پس از کم شدن ۱۰ واحد پول چاپ شود.
افزودن اسکناس (ADD_BANKNOTE)

فرمت ورودی🔗

ADD_BANKNOTE VALUE AMOUNT TIMESTAMP
Plain text

توضیحات🔗

در زمان TIMESTAMP، به تعداد AMOUNT اسکناس، هر یک به ارزش VALUE به اسکناس‌های داخل خودپرداز اضافه می‌گردد.

تضمین می‌شود مقدار VALUE یکی از مقادیر ۱، ۵، ۱۰، ۵۰ و یا ۱۰۰ است.

خروجی🔗

  • پس از افزودن اسکناس‌ها، مجموع کل دارایی خودپرداز (مجموع اسکناس‌های درون آن) چاپ شود.

نکات🔗

  • هر یوزر پس از ثبت‌نام، موجودی اولیه‌ی حسابش مقدار ۱۰۰ واحد پول است.
  • در دستور DEPOSIT، چیزی به اسکناس‌های داخل دستگاه اضافه نمی‌شود.
  • در دستور WITHDRAW، دستگاه خودپرداز در صورت پرداخت اسکناس، کمترین تعداد اسکناس را تحویل می‌دهد.
  • در ابتدا در دستگاه خودپرداز، از هر یک از اسکناس‌های به ارزش ۱، ۵، ۱۰، ۵۰ و ۱۰۰، به تعداد ۱۰ عدد داریم.
  • تضمین می‌شود فرمت تمامی TIMESTAMPها به شکل YYYY/MM/DD-hh:mm:ss است که در آن YYYY، MM، DD، hh، mm و ss به ترتیب نشان‌دهنده‌ی سال، ماه، روز، ساعت، دقیقه‌ و ثانیه‌ی عملیات است. همچنین تمامی TIMESTAMPها مقداری معتبر دارند.
  • تمامی USERNAMEها، تنها شامل حروف کوچک انگلیسی و به طول حداکثر ۱۰ هستند.
  • در هر بخش، در صورتی که بیش از یک خطا رخ دهد، اولین خطا را به عنوان خروجی در نظر بگیرید.
  • دستورات به ترتیب TIMESTAMPها اجرا می‌شوند.

زیرمسئله‌ها🔗

محدودیت‌ها نمره
در دستورات داده شده، تنها دستور REGISTER و DEPOSIT موجود است و همچنین، ترتیب TIMESTAMPها در دستورات به صورت صعودی است (دستورات به ترتیب ورودی اجرا می‌شوند). ۳۰
دستور WITHDRAW و ADD_BANKNOTE در لیست دستورات وجود ندارد. ۹۰
دستور TRANSFER در لیست دستورات وجود ندارد. ۹۰
بدون محدودیت ۹۰

ورودی🔗

ورودی شامل حداکثر ۲۰۰ خط است. در خط اول، عدد nn آمده است که نشان‌دهنده‌ی تعداد دستورات داده شده است. سپس در nn خط بعدی، در هر خط، یکی از دستورات معتبر آمده است.

تضمین می‌شود فرمت ورودی دستورات، مانند فرمت گفته شده است و همچنین هیچ دو عملیاتی TIMESTAMP یکسان ندارند. (از جمله واریز به حساب در عملیات TRANSFER)

خروجی🔗

به ازای هر دستور داده شده در ورودی، خروجی مناسب به آن را به ترتیب و در یک خط جداگانه چاپ کنید.

ورودی نمونه ۱🔗

5
REGISTER mohammad 1990/08/12-14:50:33
DEPOSIT mohammad 3000 1990/08/13-00:00:00
REGISTER abooeshagh 1990/09/15-19:00:00
DEPOSIT aboeshagh 100 1990/10/12-00:00:00
REGISTER mohammad 1990/10/18-00:00:00
Plain text

خروجی نمونه ۱🔗

Registered Successfully
3100
Registered Successfully
No Such User Found!
Duplicate User!
Plain text

ورودی نمونه ۲🔗

7
GET_BALANCE abooeshagh 1990/10/13-13:30:00
REGISTER abooeshagh 1990/09/15-19:00:00
GET_BALANCE aboeshagh 1990/10/12-00:00:00
REGISTER mohammad 1990/08/13-14:50:33
DEPOSIT mohammad 3000 1990/08/12-00:00:00
GET_BALANCE mohammad 2010/10/14-14:00:00
DEPOSIT mohammad 3000 1991/08/12-00:00:00
Plain text

خروجی نمونه ۲🔗

90
Registered Successfully
No Such User Found!
Registered Successfully
No Such User Found!
3090
3100
Plain text

ورودی نمونه ۳🔗

7
REGISTER mohammad 1990/10/13-13:30:00
WITHDRAW mammad 50 1990/10/14-13:30:00
WITHDRAW mohammad 201 1990/10/15-13:30:00
WITHDRAW mohammad 200 1990/10/16-13:30:00
WITHDRAW mohammad 4 1990/10/17-13:30:00
WITHDRAW mohammad 4 1990/10/18-13:30:00
WITHDRAW mohammad 4 1990/10/19-13:30:00
Plain text

خروجی نمونه ۳🔗

Registered Successfully
No Such User Found!
Maximum Amount Exceeded!
Not Enough Fund!
96
92
Not Enough Banknotes!
Plain text

ورودی نمونه ۴🔗

8
REGISTER mohammad 1990/10/13-13:30:00
REGISTER akbar 1990/10/14-13:30:00
TRANSFER mohammad asghar 4000 1990/10/15-13:30:00
TRANSFER mohammad akbar 101 1990/10/16-13:30:00
TRANSFER mohammad akbar 3001 1990/10/17-13:30:00
TRANSFER mohammad akbar 50 1990/10/18-13:30:00
GET_BALANCE akbar 1990/10/18-13:35:00
GET_BALANCE akbar 1990/10/19-13:30:00
Plain text

خروجی نمونه ۴🔗

Registered Successfully
Registered Successfully
No Such User Found!
Not Enough Fund!
Maximum Amount Exceeded!
50
90
130
Plain text

ورودی نمونه ۵🔗

6
REGISTER mohammad 1990/10/13-13:30:00
WITHDRAW mohammad 4 1990/10/14-13:30:00
WITHDRAW mohammad 4 1990/10/15-13:30:00
WITHDRAW mohammad 4 1990/10/16-13:30:00
ADD_BANKNOTE 1 10 1990/10/17-13:30:00
WITHDRAW mohammad 4 1990/10/18-13:30:00
Plain text

خروجی نمونه ۵🔗

Registered Successfully
96
92
Not Enough Banknotes!
1662
88
Plain text