+ محدودیت زمان: ۱ ثانیه
+ محدودیت حافظه: ۲۵۶ مگابایت
----------
میخواهیم دستگاه خودپردازی را شبیهسازی کنیم که عملیات مختلف را پیشتیبانی میکند. توضیحات هر عملیات در قسمت مربوطه آمده است.
<details class="blue">
<summary>
ثبتنام (`REGISTER`)
</summary>
## فرمت ورودی
```
REGISTER USERNAME TIMESTAMP
```
## توضیحات
یک یوزر با نام `USERNAME` در زمان `TIMESTAMP` در خودپرداز ثبتنام میکند.
## خروجی
+ در صورتی که در زمان ثبتنام، یوزری با نام `USERNAME` ثبتنام کرده باشد، پیغام `Duplicate User!` چاپ شود.
+ در غیر این صورت، پیغام `Registered Successfully` چاپ شود.
</details>
<details class="blue">
<summary>
واریز به حساب (`DEPOSIT`)
</summary>
## فرمت ورودی
```
DEPOSIT USERNAME AMOUNT TIMESTAMP
```
## توضیحات
مقدار `AMOUNT` واحد پول در زمان `TIMESTAMP` به حساب یوزر با نام `USERNAME` اضافه میگردد.
## خروجی
+ در صورتی که در زمان افزایش موجودی، یوزری با نام `USERNAME` وجود نداشت، پیغام `No Such User Found!` چاپ شود.
+ در غیر این صورت، موجودی حساب یوزر با نام `USERNAME` پس از افزایش موجودی چاپ شود.
</details>
<details class="blue">
<summary>
برداشت از حساب (`WITHDRAW`)
</summary>
## فرمت ورودی
```
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` پس از برداشت از حساب چاپ شود.
</details>
<details class="blue">
<summary>
انتقال موجودی (`TRANSFER`)
</summary>
## فرمت ورودی
```
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` پس از انتقال موجودی چاپ شود.
</details>
<details class="blue">
<summary>
استعلام موجودی (`GET_BALANCE`)
</summary>
## فرمت ورودی
```
GET_BALANCE USERNAME TIMESTAMP
```
## توضیحات
در زمان `TIMESTAMP`، موجودی حساب یوزر با نام `USERNAME` را چاپ میکند و مقدار **۱۰ واحد** پول از آن حساب کم میکند.
## خروجی
+ در صورتی که در زمان `TIMESTAMP`، یوزری با نام `USERNAME` وجود نداشت، پیغام `No Such User Found!` چاپ شود.
+ در صورتی که موجودی حساب یوزر با نام `USERNAME` در هنگام اجرای عملیات کمتر از **۱۰ واحد** پول بود، پیغام `Not Enough Fund!` چاپ شود.
+ در غیر این صورت، موجودی حساب یوزر با نام `USERNAME` پس از کم شدن **۱۰ واحد** پول چاپ شود.
</details>
<details class="blue">
<summary>
افزودن اسکناس (`ADD_BANKNOTE`)
</summary>
## فرمت ورودی
```
ADD_BANKNOTE VALUE AMOUNT TIMESTAMP
```
## توضیحات
در زمان `TIMESTAMP`، به تعداد `AMOUNT` اسکناس، هر یک به ارزش `VALUE` به اسکناسهای داخل خودپرداز اضافه میگردد.
**تضمین میشود مقدار `VALUE` یکی از مقادیر ۱، ۵، ۱۰، ۵۰ و یا ۱۰۰ است.**
## خروجی
+ پس از افزودن اسکناسها، مجموع کل دارایی خودپرداز (مجموع اسکناسهای درون آن) چاپ شود.
</details>
## نکات
+ هر یوزر پس از ثبتنام، موجودی اولیهی حسابش مقدار **۱۰۰ واحد** پول است.
+ در دستور `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
```
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.