- محدودیت زمان: ۱ ثانیه
- محدودیت حافظه: ۲۵۶ مگابایت
میخواهیم دستگاه خودپردازی را شبیهسازی کنیم که عملیات مختلف را پیشتیبانی میکند. توضیحات هر عملیات در قسمت مربوطه آمده است.
ثبتنام (REGISTER)
REGISTER)فرمت ورودی
REGISTER USERNAME TIMESTAMP
توضیحات
یک یوزر با نام USERNAME در زمان TIMESTAMP در خودپرداز ثبتنام میکند.
خروجی
- در صورتی که در زمان ثبتنام، یوزری با نام
USERNAMEثبتنام کرده باشد، پیغامDuplicate User!چاپ شود. - در غیر این صورت، پیغام
Registered Successfullyچاپ شود.
واریز به حساب (DEPOSIT)
DEPOSIT)فرمت ورودی
DEPOSIT USERNAME AMOUNT TIMESTAMP
توضیحات
مقدار AMOUNT واحد پول در زمان TIMESTAMP به حساب یوزر با نام USERNAME اضافه میگردد.
خروجی
- در صورتی که در زمان افزایش موجودی، یوزری با نام
USERNAMEوجود نداشت، پیغامNo Such User Found!چاپ شود. - در غیر این صورت، موجودی حساب یوزر با نام
USERNAMEپس از افزایش موجودی چاپ شود.
برداشت از حساب (WITHDRAW)
WITHDRAW)فرمت ورودی
WITHDRAW USERNAME AMOUNT TIMESTAMP
توضیحات
مقدار AMOUNT واحد پول در زمان TIMESTAMP از حساب یوزر با نام USERNAME کم میگردد و به ازای آن، به اندازهی AMOUNT واحد پول، از اسکناسهای داخل خودپرداز کم میشود.
خروجی
- در صورتی که در زمان برداشت از حساب، یوزری با نام
USERNAMEوجود نداشت، پیغامNo Such User Found!چاپ شود. - در صورتی که مقدار
AMOUNTبیش از ۲۰۰ واحد پول بود، پیغامMaximum Amount Exceeded!چاپ شود. - در صورتی که در زمان برداشت از حساب، موجودی حساب با نام
USERNAMEکمتر از مقدارAMOUNTبود، پیغامNot Enough Fund!چاپ شود. - در صورتی که با اسکناسهای داخل دستگاه نمیتوانستیم مقدار خواسته شده را پرداخت کنیم، پیغام
Not Enough Banknotes!چاپ شود. - در غیر این صورت، موجودی حساب یوزر با نام
USERNAMEپس از برداشت از حساب چاپ شود.
انتقال موجودی (TRANSFER)
TRANSFER)فرمت ورودی
TRANSFER SENDER_USERNAME RECEIVER_USERNAME AMOUNT TIMESTAMP
توضیحات
مقدار 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)فرمت ورودی
GET_BALANCE USERNAME TIMESTAMP
توضیحات
در زمان TIMESTAMP، موجودی حساب یوزر با نام USERNAME را چاپ میکند و مقدار ۱۰ واحد پول از آن حساب کم میکند.
خروجی
- در صورتی که در زمان
TIMESTAMP، یوزری با نامUSERNAMEوجود نداشت، پیغامNo Such User Found!چاپ شود. - در صورتی که موجودی حساب یوزر با نام
USERNAMEدر هنگام اجرای عملیات کمتر از ۱۰ واحد پول بود، پیغامNot Enough Fund!چاپ شود. - در غیر این صورت، موجودی حساب یوزر با نام
USERNAMEپس از کم شدن ۱۰ واحد پول چاپ شود.
افزودن اسکناس (ADD_BANKNOTE)
ADD_BANKNOTE)فرمت ورودی
ADD_BANKNOTE VALUE AMOUNT TIMESTAMP
توضیحات
در زمان 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 در لیست دستورات وجود ندارد. |
۹۰ |
| بدون محدودیت | ۹۰ |
ورودی
ورودی شامل حداکثر ۲۰۰ خط است. در خط اول، عدد $n$ آمده است که نشاندهندهی تعداد دستورات داده شده است. سپس در $n$ خط بعدی، در هر خط، یکی از دستورات معتبر آمده است.
تضمین میشود فرمت ورودی دستورات، مانند فرمت گفته شده است و همچنین هیچ دو عملیاتی 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
خروجی نمونه ۱
Registered Successfully
3100
Registered Successfully
No Such User Found!
Duplicate User!
ورودی نمونه ۲
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
خروجی نمونه ۲
90
Registered Successfully
No Such User Found!
Registered Successfully
No Such User Found!
3090
3100
ورودی نمونه ۳
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
خروجی نمونه ۳
Registered Successfully
No Such User Found!
Maximum Amount Exceeded!
Not Enough Fund!
96
92
Not Enough Banknotes!
ورودی نمونه ۴
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
خروجی نمونه ۴
Registered Successfully
Registered Successfully
No Such User Found!
Not Enough Fund!
Maximum Amount Exceeded!
50
90
130
ورودی نمونه ۵
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
خروجی نمونه ۵
Registered Successfully
96
92
Not Enough Banknotes!
1662
88
ارسال پاسخ برای این سؤال