- محدودیت زمان: ۱ ثانیه
- محدودیت حافظه: ۲۵۶ مگابایت
میخواهیم دستگاه خودپردازی را شبیهسازی کنیم که عملیات مختلف را پیشتیبانی میکند. توضیحات هر عملیات در قسمت مربوطه آمده است.
ثبتنام (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
ارسال پاسخ برای این سؤال