#include #include #include #include using namespace std; string int2stringDOT(long long c) { long long posun = 0 + (c<100) + (c<10); char pole[100]; long long i; for(i=1;;i++) { pole[i] = (c%10) + '0'; c /= 10; if(c==0) break; } for(;posun>0;posun--) pole[++i] = '0'; pole[++i] = '\0'; pole[0] = pole[1]; pole[1] = pole[2]; pole[2] = '.'; string s(pole); reverse(s.begin(),s.end()); return s; } struct UM { int akt_uct1 ; int akt_uct2 ; long long akt_val ; int akt_cr1 ; int akt_cr2 ; string * zapisy; int* pocet_cr_uctu; UM(string* zp,int* pcru) { pocet_cr_uctu = pcru; zapisy = zp; akt_uct1 = 1000; akt_uct2 = 0; akt_val = 10000*100; akt_cr1 = 9999; akt_cr2 = 9; } string get_source(long long needed) { bool zapsat = false; if(akt_valoperator+=(x); zapisy->operator+=(" 10000.00\n"); (*pocet_cr_uctu) ++ ; } return string(x); } string get_cr() { akt_cr1--; if(akt_cr1==999) { akt_cr1=9999; akt_cr2--; } char x[] = { (akt_cr1/1000)+'0' , ((akt_cr1/100)%10)+'0' , ((akt_cr1/10)%10)+'0' , (akt_cr1%10)+'0' , '/' , akt_cr2 + '0' , '\0'}; return string(x); } }; const string NEEX("0001/0"); string zebraci[] = {"0002/0", "0002/1", "0002/2", "0002/3", "0002/4", "0002/5", "0002/6", "0002/7", "0002/8", "0002/9" }; int main() { for(;;) { int pocet_cr_uctu = 4+8; string cr_ucty = "0000/0 0.00\n" //no money "0002/0 0.00\n" "0002/1 0.00\n" "0002/2 0.00\n" "0002/3 0.00\n" "0002/4 0.00\n" "0002/5 0.00\n" "0002/6 0.00\n" "0002/7 0.00\n" "0002/8 0.00\n" "0002/9 0.00\n" // zebraci "1000/0 10000.00\n"; UM manazer_cru(&cr_ucty , &pocet_cr_uctu); string pravidla; for(;;) { string akce; cin >> akce; if(akce == "goodbye") { cout<<0<> v1>>x>>v2>>x>>stav; long long castka = v1*100+v2; if(stav=="ok") { string ucet = manazer_cru.get_source(castka); manazer_cru.akt_val -= castka; pravidla += "withdraw "; pravidla += ucet; pravidla += " "; pravidla += int2stringDOT(castka); pravidla += "\n"; } else if(stav=="insufficient") { cin >> stav; pravidla += "withdraw 0000/0 "; pravidla += int2stringDOT(castka); pravidla += "\n"; } else //neex { cin >> stav >> stav; pravidla += "withdraw 0001/0 "; pravidla += int2stringDOT(castka); pravidla += "\n"; } }//!withdraw else if(akce=="deposit") { long long v1,v2; char x; string stav; cin >> v1>>x>>v2>>x>>stav; long long castka = v1*100+v2; if(stav=="ok") { pravidla += "deposit 0002/0 "; pravidla += int2stringDOT(castka); pravidla += "\n"; } else // NEEX { cin >> stav >> stav; pravidla += "withdraw 0001/0 "; pravidla += int2stringDOT(castka); pravidla += "\n"; } }//!deposit else if(akce == "create:") { string stav; cin >> stav; if(stav=="ok") { pravidla += "create "; pravidla += manazer_cru.get_cr(); pravidla += "\n"; } else //alrd exst { cin >> stav; pravidla += "create 1000/0\n"; } }//!create else if(akce == "transfer") { long long v1,v2; char x; string stav; cin >> v1>>x>>v2>>x>>stav; long long castka = v1*100+v2; if(stav == "ok") { string d,z; d = manazer_cru.get_source(castka); z = zebraci[manazer_cru.akt_uct2]; pravidla += "transfer "; pravidla += d; pravidla += " "; pravidla += z; pravidla += " "; pravidla += int2stringDOT(castka); pravidla += "\n"; } else if(stav == "interbank") { string d,z; d = manazer_cru.get_source(castka); z = zebraci[(manazer_cru.akt_uct2+1)%10]; pravidla += "transfer "; pravidla += d; pravidla += " "; pravidla += z; pravidla += " "; pravidla += int2stringDOT(castka); pravidla += "\n"; } else if(stav == "same") { cin >> stav; pravidla += "transfer 1000/0 1000/0 "; pravidla += int2stringDOT(castka); pravidla += "\n"; } else if(stav == "insufficient") { cin >> stav; pravidla += "transfer 0000/0 1000/0 "; pravidla += int2stringDOT(castka); pravidla += "\n"; } else // no such account { pravidla += "transfer 0001/0 1000/0 "; pravidla += int2stringDOT(castka); pravidla += "\n"; } } } } return 0; }