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

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

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


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

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

ثبت‌نام (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
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.