#include #include #include using namespace std; int parse_acctnum(string tmp){ int acctnum = 0; for(string::iterator it = tmp.begin(); it != tmp.end(); it++){ if(*it == '/') continue; acctnum *= 10; acctnum += (*it - '0'); } return acctnum; } int parse_amount(string tmp){ int amount = 0;; for(string::iterator it = tmp.begin(); it != tmp.end(); it++){ if(*it == '.') continue; amount *= 10; amount += (*it - '0'); } return amount; } void format_amount(int a){ cout << ' ' << (a/100) << "." << ((a%100)/10) << (a%10); } int main(void) { map account; int naccts, acctnum, amount; string tmp; while(true){ cin >> naccts; if(naccts <= 0) break; for(int i=0; i> tmp; acctnum = parse_acctnum(tmp); cin >> tmp; amount = parse_amount(tmp); //cout << "ucet: " << acctnum << " " << amount << endl; //account[acctnum] = amount; account.insert(make_pair(acctnum, amount)); } /* for(map::iterator it = account.begin(); it != account.end(); it++){ cout << it->first << " " << it->second << endl; } break; */ while(true){ cin >> tmp; if(tmp == "end"){ cout << "end\n\n"; break; } cout << tmp; if(tmp == "create"){ cin >> tmp; acctnum = 0; for(string::iterator it = tmp.begin(); it != tmp.end(); it++){ if(*it == '/') continue; acctnum *= 10; acctnum += (*it - '0'); } //existuje? if(account.count(acctnum) > 0){ cout << ": already exists\n"; continue; } account.insert(make_pair(acctnum, 0)); cout << ": ok\n"; }else if(tmp == "deposit"){ cin >> tmp; int acctnum = parse_acctnum(tmp); cin >> tmp; int amount = parse_amount(tmp); format_amount(amount); if(account.count(acctnum) == 0){ cout << ": no such account\n"; continue; } account[acctnum] = account[acctnum] + amount; cout << ": ok\n"; }else if(tmp == "withdraw"){ cin >> tmp; int acctnum = parse_acctnum(tmp); cin >> tmp; int amount = parse_amount(tmp); format_amount(amount); if(account.count(acctnum) == 0){ cout << ": no such account\n"; continue; } if(account[acctnum] < amount){ cout << ": insufficient funds\n"; continue; } account[acctnum] -= amount; cout << ": ok\n"; }else if(tmp == "transfer"){ cin >> tmp; int acctnum_from = parse_acctnum(tmp); cin >> tmp; int acctnum_to = parse_acctnum(tmp); cin >> tmp; int amount = parse_amount(tmp); format_amount(amount); if(account.count(acctnum_from) == 0){ cout << ": no such account\n"; continue; } if(account.count(acctnum_to) == 0){ cout << ": no such account\n"; continue; } if(acctnum_from == acctnum_to){ cout << ": same account\n"; continue; } if(account[acctnum_from] < amount){ cout << ": insufficient funds\n"; continue; } if(acctnum_from % 10 == acctnum_to % 10){ cout << ": ok\n"; }else{ cout << ": interbank\n"; } account[acctnum_from] -= amount; account[acctnum_to] += amount; }else{ cerr << "wtf: " << tmp << endl;; exit(1); } } //vymazat mapu account.erase(account.begin(), account.end()); } cout << "goodbye\n"; return 0; }