.لینک‌های مفید برای شرکت در مسابقه:

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

توجه کنید که سوال چهارم جنبه الگوریتمی، سوال پنجم جنبه پیاده‌سازی و سوال ششم جنبه چالشی دارد؛ پیشنهاد می‌کنیم بعد از حل سه سوال اول، طبق مهارت‌های خود، به‌ترتیب سراغ حل سوالات مد نظر خود بروید.

طرح ترافیک


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

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

هر ماشین، می‌تواند در روزهای زوج یا فرد (بسته به پلاکش) در محدوده طرح زوج و فرد تردد کند و هیچ هزینه‌ای لازم نیست بدهد. ولی اگه در روز غیر از زوجیت پلاکش وارد طرح شود، دو حالت دارد، یا طرح برای آن روز نخریده و جریمه می‌شود یا طرح خریده که هیچ مشکلی نیست.

با خرید یک طرح dd روزه برای یک خودرو، از فردای روزی که طرح خریداری شده است به مدت dd روز، رفت آمد در طرح مشکلی ندارد.

در این سیستم، هر نفر باید یک حساب داشته باشد که در ابتدا اعتبار حسابش صفر است و می‌تواند اعتبار این حساب را افزایش دهد و یا برای یک ماشینش یک طرح بخرد. (توجه کنید حساب‌ها برای اشخاص است، نه ماشین‌ها).

توجه کنید جریمه شدن یک شخص برای ورود به طرح، از اعتبار حساب این شخص برای خرید طرح جداست. یعنی نباید مبلغ جریمه‌ها از حساب راننده‌ها کسر شود.

درخواست‌ها🔗

درخواست REGISTER
REGISTER <USERNAME> <TIMESTAMP>
Plain text

در این درخواست یک نفر با نام <USERNAME> در لحظه <TIMESTAMP> به سیستم طرح ترافیک اضافه می‌شود.

  • <USERNAME> یک رشته به طول حداقل ۱ و حداکثر ۲۰ از حروف کوچک و بزرگ انگلیسی و ارقام است.
  • <TIMESTAMP> یک رشته به فرمت yyyy/mm/dd است که زمان این اتفاق را نشان می‌دهد. تضمین می‌شود این زمان قابل قبول است.

در صورتی این فرد با موفقیت به سیستم اضافه می‌شود که قبلاً هیچ کسی با این <USERNAME> در سیستم ثبت نام نکرده باشد.

بعد از دریافت این درخواست، در صورتی که این فرد با موفقیت به سیستم اضافه شد پیام REGISTER DONE و در غیر این صورت پیام INVALID USERNAME را چاپ کنید.

مثالی از این درخواست:

REGISTER alireza 1402/10/15
Plain text
درخواست REGISTER_CAR
REGISTER_CAR <USERNAME> <CAR_PLATE> <TIMESTAMP>
Plain text

در این درخواست یک نفر با نام <USERNAME> با شماره پلاک <CAR_PLATE> در لحظه <TIMESTAMP> به سیستم طرح ترافیک اضافه می‌کند.

  • <USERNAME> یک رشته به طول حداقل ۱ و حداکثر ۲۰ از حروف کوچک و بزرگ انگلیسی و ارقام است.
  • <CAR_PLATE> یک رشته به طول دقیقاً ۱۰ از ارقام است. این رشته می‌تواند با صفر آغاز شود.
  • <TIMESTAMP> یک رشته به فرمت yyyy/mm/dd است که زمان این اتفاق را نشان می‌دهد.

در صورت رخ دادن هر کدام از حالت‌های زیر دقیقا یکی از پیام‌های زیر را به الویت از بالا به پایین اجرا کنید:

  • در صورتی که فردی با نام <USERNAME> وجود ندارد پیام INVALID USERNAME را چاپ کنید.
  • در صورتی که این شماره پلاک (<CAR_PLATE>) برای یک خودرو دیگر ثبت شده است (حتی اگر خودرو برای همین راننده باشد) پیام INVALID CAR PLATE را چاپ کنید.
  • در صورتی که هیچ کدام از اتفاقات بالا نیفتاد پیام REGISTER CAR DONE را چاپ کنید.

مثالی از این درخواست:

REGISTER_CAR alireza 7741181522 1402/10/15
Plain text
درخواست NEW_RECORD
NEW_RECORD <CAR_PLATE> <TIMESTAMP>
Plain text

در این درخواست یک ماشین با شماره پلاک <CAR_PLATE> در لحظه <TIMESTAMP> وارد محدوده طرح ترافیک شده است.

  • <CAR_PLATE> یک رشته به طول دقیقاً ۱۰ از ارقام است. این رشته می‌تواند با صفر آغاز شود.
  • <TIMESTAMP> یک رشته به فرمت yyyy/mm/dd است که زمان این اتفاق را نشان می‌دهد.

اگر ماشینی با این شماره پلاک در سیستم ثبت نشده است پیام INVALID CAR PLATE را چاپ کنید و در غیر این صورت اگر این درخواست در روز فرد آمده ولی پلاک ماشین زوج است یا درخواست در روز زوج آمده ولی پلاک ماشین فرد است و این ماشین برای این روز طرح ندارد پیام PENALTY RECORDED را چاپ و راننده این ماشین را به اندازه ۱۰۰ جریمه کنید و در غیر این صورت پیام NORMAL RECORDED را چاپ کنید.

مثالی از این درخواست:

NEW_RECORD 7741181522 1402/10/15
Plain text
درخواست BUY_LICENSE
BUY_LICENSE <USERNAME> <CAR_PLATE> <LENGTH> <TIMESTAMP>
Plain text

در این درخواست یک نفر با نام <USERNAME> برای ماشین خود با شماره پلاک <CAR_PLATE> یک طرح ترافیک <LENGTH> روزه در روز <TIMESTAMP> می‌خرد.

  • <USERNAME> یک رشته به طول حداقل ۱ و حداکثر ۲۰ از حروف کوچک و بزرگ انگلیسی و ارقام است.
  • <CAR_PLATE> یک رشته به طول دقیقاً ۱۰ از ارقام است. این رشته می‌تواند با صفر آغاز شود.
  • <LENGTH> یک عدد صحیح از ۱ تا ۱۰۰۰ است.
  • <TIMESTAMP> یک رشته به فرمت yyyy/mm/dd است که زمان این اتفاق را نشان می‌دهد.

در صورت رخ دادن هر کدام از حالت‌های زیر دقیقا یکی از پیام‌های زیر را به الویت از بالا به پایین اجرا کنید:

  • در صورتی که شخصی با نام <USERNAME> در سیستم وجود ندارد پیام INVALID USERNAME را چاپ کنید.
  • در صورتی که این شخص ماشینی با شماره پلاک <CAR_PLATE> ندارد پیام INVALID CAR PLATE را چاپ کنید.
  • قیمت خرید هر طرح برای یک روز ۷۰ است و این مبلغ از حساب راننده کسر می‌شود. در صورتی که راننده چنین مبلغی در حساب خود ندارد پیام NO ENOUGH MONEY را چاپ کنید.
  • در غیر این صورت پیام BUY LICENSE DONE را چاپ کنید.

توجه کنید خرید طرح ترافیک برای یک خودرو در روز ddام به مدت kk روز یعنی این راننده می‌تواند در روزهای d+1,d+2,d+3,,d+kd + 1, d + 2, d + 3, \dots, d + k در محدوده طرح ترافیک تردد کند.

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

مثالی از این درخواست:

BUY_LICENSE alireza 7741181522 13 1402/10/15
Plain text
درخواست ADD_BALANCE
ADD_BALANCE <USERNAME> <AMOUNT> <TIMESTAMP>
Plain text

در این درخواست فردی با نام <USERNAME> اعتبار حساب خود در این سامانه را به اندازه <AMOUNT> در لحظه <TIMESTAMP> افزایش می‌دهد.

  • <USERNAME> یک رشته به طول حداقل ۱ و حداکثر ۲۰ از حروف کوچک و بزرگ انگلیسی و ارقام است.
  • <AMOUNT> یک عدد طبیعی کوچک‌تر یا مساوی ۱۰۰۰ است.
  • <TIMESTAMP> یک رشته به فرمت yyyy/mm/dd است که زمان این اتفاق را نشان می‌دهد.

اگر شخصی با نام <USERNAME> در این سامانه وجود ندارد پیام INVALID USERNAME و در غیر این صورت پیام ADD BALANCE DONE را چاپ کنید.

مثالی از این درخواست در ورودی:

ADD_BALANCE alireza 850 1402/10/15
Plain text
درخواست GET_BALANCE
GET_BALANCE <USERNAME> <TIMESTAMP>
Plain text

در این درخواست فردی با نام <USERNAME> اعتبار حساب خود در این سامانه را در لحظه <TIMESTAMP> می‌پرسد.

  • <USERNAME> یک رشته به طول حداقل ۱ و حداکثر ۲۰ از حروف کوچک و بزرگ انگلیسی و ارقام است.
  • <TIMESTAMP> یک رشته به فرمت yyyy/mm/dd است که زمان این اتفاق را نشان می‌دهد.

مثالی از این درخواست:

GET_BALANCE alireza 1402/10/15
Plain text

اگر شخصی با نام <USERNAME> در این سامانه وجود ندارد پیام INVALID USERNAME و در غیر این صورت مقدار اعتبار حساب این شخص را چاپ کنید.

درخواست GET_PENALTY
GET_PENALTY <USERNAME> <TIMESTAMP>
Plain text

در این درخواست مقدار جریمه‌های <USERNAME> در لحظه <TIMESTAMP> را چاپ کنید.

  • <USERNAME> یک رشته به طول حداقل ۱ و حداکثر ۲۰ از حروف کوچک و بزرگ انگلیسی و ارقام است.
  • <TIMESTAMP> یک رشته به فرمت yyyy/mm/dd است که زمان این اتفاق را نشان می‌دهد.

اگر شخصی با نام <USERNAME> در این سامانه وجود ندارد پیام INVALID USERNAME و در غیر این صورت مقدار جریمه‌ی این شخص را چاپ کنید.

مثالی از این درخواست:

GET_PENALTY alireza 1402/10/15
Plain text
درخواست GET_LICENSE_DEADLINE
GET_LICENSE_DEADLINE <CAR_PLATE> <TIMESTAMP>
Plain text

در این درخواست اولین روز بعد از <TIMESTAMP> که ماشین با پلاک <CAR_PLATE> طرح ندارد را چاپ کنید. (این موضوع ربطی به زوج و فرد بودن پلاک ندارد.)

  • <CAR_PLATE> یک رشته به طول دقیقاً ۱۰ از ارقام است. این رشته می‌تواند با صفر آغاز شود.
  • <TIMESTAMP> یک رشته به فرمت yyyy/mm/dd است که زمان این اتفاق را نشان می‌دهد.

اگر ماشینی با این شماره پلاک در سیستم ثبت نشده است پیام INVALID CAR PLATE را چاپ کنید در غیر این صورت اولین روزی که بعد از روز<TIMESTAMP> این ماشین طرح ندارد را به صورت yyyy/mm/dd چاپ کنید.

توجه کنید اگر این ماشین تاکنون طرح نداشته است باید فردای <TIMESTAMP> را چاپ کنید.

مثالی از این درخواست:

GET_LICENSE_DEADLINE 7741181522 1402/10/15
Plain text

نکات🔗

  • این سامانه برای سال ۱۴۰۰ به بعد طراحی شده است یعنی تمام زمان‌های داده شده در سال ۱۴۰۰ یا بعد از آن است. همچنین می‌دانیم ۱۴۰۰/۰۱/۰۱ شنبه است.
  • منظور از روز‌های زوج، شنبه، دوشنبه و چهارشنبه و منظور از روزهای فرد، یک‌شنبه، سه‌شنبه، پنج‌شنبه است. روز جمعه نه زوج است و نه فرد و تردد ماشین‌ها برای این روز آزاد است.
  • در این سوال ماه‌ها ۳۰ روزه هستند و سال کبیسه نداریم.
  • توجه کنید پول داخل حساب هیچ ارتباطی با مبالغ جریمه شده ندارد.

ورودی🔗

در هر سطر از ورودی یکی از درخواست‌ها که در متن سوال آمده است را دریافت می‌کنید. تعداد درخواست‌ها حداکثر ۳۰۰ است.

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

تضمین می‌شود تمام TIMESTAMPها قابل قبول و متمایز و به ترتیب زمان صعودی باشد.

خروجی🔗

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

مثال🔗

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

REGISTER amin 1400/01/01
REGISTER ali 1400/01/07
REGISTER amin 1400/01/18
REGISTER_CAR amin 7124862189 1400/01/21
REGISTER_CAR amin 2564518722 1400/01/23
REGISTER_CAR amin 5654121543 1400/01/24
NEW_RECORD 7124862189 1400/01/27
NEW_RECORD 7124862189 1400/01/28
NEW_RECORD 7124862189 1400/01/29
GET_PENALTY amin 1400/02/04
GET_BALANCE amin 1400/02/05
ADD_BALANCE amin 150 1400/02/06
GET_PENALTY amin 1400/02/07
GET_BALANCE amin 1400/02/08
GET_LICENSE_DEADLINE 2564518722 1400/02/09
END
Plain text

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

REGISTER DONE
REGISTER DONE
INVALID USERNAME
REGISTER CAR DONE
REGISTER CAR DONE
REGISTER CAR DONE
NORMAL RECORDED
NORMAL RECORDED
PENALTY RECORDED
100
0
ADD BALANCE DONE
100
150
1400/02/10
Plain text

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

REGISTER amin 1400/01/02
REGISTER ali 1400/01/07
REGISTER amin 1400/01/08
REGISTER_CAR amin 7124862189 1400/01/09
REGISTER_CAR amin 2564518722 1400/01/10
REGISTER_CAR amin 5654121543 1400/01/14
ADD_BALANCE amin 350 1400/01/19
GET_BALANCE amin 1400/01/20
BUY_LICENSE amin 2564518722 3 1400/01/22
GET_LICENSE_DEADLINE 2564518722 1400/02/03
GET_BALANCE amin 1400/01/24
NEW_RECORD 2564518722 1400/01/27
NEW_RECORD 2564518722 1400/01/28
NEW_RECORD 2564518722 1400/01/29
GET_PENALTY amin 1400/02/04
GET_BALANCE amin 1400/02/08
END
Plain text

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

REGISTER DONE
REGISTER DONE
INVALID USERNAME
REGISTER CAR DONE
REGISTER CAR DONE
REGISTER CAR DONE
ADD BALANCE DONE
350
BUY LICENSE DONE
1400/02/04
140
PENALTY RECORDED
NORMAL RECORDED
NORMAL RECORDED
100
140
Plain text
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.