#include #include #include #include #define MAX 10000 #define MAXH (MAX*4) typedef char CU[11]; double amt[MAX]; CU u[MAX]; int nuctu; int ht[MAXH + 1]; double celkem; int hash(CU c) { int h = 0; int i; for (i=0; i<10;i++) { h = (h << 3) + (h << 2) + c[i]; if (h >= MAXH) h = h % MAXH; } return h + 1; } int place(CU c) { int h = hash(c); int i; while ((i = ht[h]) != -1) { if (!strncmp(u[i],c,10)) return i; if (h == MAXH) h = 1; else h++; } return -h; } int zaloz(CU c) { int i; if ((i = place(c)) < 0) { i = -i; ht[i] = nuctu; strncpy(u[nuctu],c,10); amt[nuctu] = 0.0; nuctu++; return 0; } return 1; } int uloz(CU c, double x) { int i; if ((i = place(c)) < 0) return 1; amt[i] += x; celkem += x; return 0; } int vyber(CU c, double x) { int i; if ((i = place(c)) < 0) return 1; if (x > amt[i]) return 2; amt[i] -= x; celkem -= x; return 0; } int preved(CU c, CU d, double x) { int i,j, k = 0; if ((i = place(c)) < 0) k |= 1; if (x > amt[i]) k |= 2; if ((j = place(d)) < 0) k |= 4; if (k) return k; amt[i] -= x; amt[j] += x; return 0; } void reset(void) { int i; nuctu = 0; celkem = 0.0; for (i = 1; i <= MAXH; i++) ht[i] = -1; memset(u,0,sizeof(u)); } int main(){ char com[20]; CU c, d; double x; int i, e; reset(); while (1) { if (scanf(" %s",com) <= 0) break; if (com[0] == 0) break; switch (com[0]) { case 'Z': scanf(" %10s",c); if (zaloz(c)) printf("Ucet %s uz existuje.\n",c); else printf("Ucet %s vytvoren.\n",c); break; case 'U': scanf(" %10s %lf",c,&x); if (uloz(c,x)) printf("Ucet %s neexistuje.\n",c); else printf("Ulozeno %.2f na ucet %s.\n",x,c); break; case 'V': scanf(" %10s %lf",c,&x); e = vyber(c,x); if (e == 1) printf("Ucet %s neexistuje.\n",c); else if (e == 2) printf("Nedostatek penez.\n"); else printf("Vybrano %.2f z uctu %s.\n",x,c); break; case 'P': scanf(" %10s %10s %lf",c,d,&x); e = preved(c,d,x); if (e & 1) printf("Ucet %s neexistuje.\n",c); if (e & 2) printf("Nedostatek penez.\n;"); if (e & 4) printf("Ucet %s neexistuje.\n",d); if (!e) printf("Prevedeno %.2f z uctu %s na ucet %s.\n", x,c,d); break; case 'S': case 'L': printf("Pocet uctu: %d\n",nuctu); if (com[0] == 'L') for(i=0;i