#include #include #include #include #include #include using namespace std; class Account{ public: int id; float ammount; Account(int _id, float _ammount) :id(_id), ammount(_ammount) {} }; class Bank{ public: std::map accounts; int id; Bank(int _id):id(_id){} }; int main(){ int accounts; int id, bankid; float balance; std::map banks; cin >> accounts; while(accounts--){ scanf("%d/%d %f", &id, &bankid, &balance); // cout << id << " ... " << bankid << " = " << balance << "\n"; std::map::iterator bit= banks.find(bankid); if(bit == banks.end()){ banks.insert(std::pair(bankid, Bank(bankid))); bit= banks.find(bankid); bit->second.accounts.insert(std::pair(id, Account(id, balance))); }else{ bit->second.accounts.insert(std::pair(id, Account(id, balance))); } } // for(map::iterator bit= banks.begin(); bit != banks.end(); bit++) // for(map::iterator it= bit->second.accounts.begin(); it != bit->second.accounts.end(); it++) // cou t << it->second.id << " " << it->second.ammount << "\n"; while(1){ while(1){ string str; cin >> str; if(str == "create"){ scanf("%d/%d", &id, &bankid); cout << str << ": "; std::map::iterator bit= banks.find(bankid); std::map::iterator it = bit->second.accounts.find(id); if(it != bit->second.accounts.end()){ cout << "already exists\n"; }else{ bit->second.accounts.insert(std::pair(id, Account(id, 0))); cout << "ok\n"; } }else if(str == "deposit"){ scanf("%d/%d %f", &id, &bankid, &balance); cout << str; printf(" %0.2f: ", balance); std::map::iterator bit= banks.find(bankid); std::map::iterator it = bit->second.accounts.find(id); if(it != bit->second.accounts.end()){ it->second.ammount += balance; cout << "ok\n"; }else{ cout << "no such account\n"; } }else if(str == "withdraw"){ scanf("%d/%d %f", &id, &bankid, &balance); cout << str; printf(" %0.2f: ", balance); std::map::iterator bit= banks.find(bankid); std::map::iterator it = bit->second.accounts.find(id); if(it != bit->second.accounts.end()){ if(it->second.ammount >= balance){ it->second.ammount -= balance; cout << "ok\n"; }else{ cout << "insufficient funds\n"; } }else{ cout << "no such account\n"; } }else if(str == "transfer"){ int id2, bankid2; scanf("%d/%d %d/%d %f", &id, &bankid, &id2, &bankid2, &balance); cout << str; printf(" %0.2f: ", balance); if(bankid == bankid2 && id == id2) cout << "same account\n"; else{ std::map::iterator bit= banks.find(bankid); std::map::iterator it = bit->second.accounts.find(id); if(it != bit->second.accounts.end()){ std::map::iterator bit2= banks.find(bankid); std::map::iterator it2 = bit2->second.accounts.find(id); if(it2 != bit2->second.accounts.end()){ if(it->second.ammount >= balance){ it->second.ammount -= balance; it2->second.ammount += balance; if(bit == bit2) cout << "interbank\n"; else cout << "ok\n"; }else{ cout << "insufficient funds\n"; } }else{ cout << "no such account\n"; } }else{ cout << "no such account\n"; } } }else if(str == "end"){ cout << str << "\n\n"; }else if(str == ""){ break; }else if(str == "0"){ cout << "goodbye\n"; return 0; } } banks.clear(); if(cin.eof()) break; } cout << "goodbye\n"; return 0; }