Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <list>
- #include <cmath>
- using namespace std;
- #define PRZELEW '+'
- #define WYSWIETL '?'
- class Konto {
- public:
- Konto(const int & b, const string & a) {
- nazwa = a;
- bilans = b;
- }
- string nazwa;
- int bilans;
- };
- int shash(const string & tekst)
- {
- int val = 0;
- for (int i = 0; i < tekst.length(); i++)
- val += pow((tekst[i]%2),i);
- return val;
- }
- class lista_platnikow :public list < Konto *> {
- public:
- lista_platnikow() :list<Konto *>() {};
- string nazwa;
- ~lista_platnikow() {
- while (size() != 0)
- {
- delete back();
- pop_back();
- }
- }
- };
- int main() {
- char operacja;
- string placacy, odbiorca;
- int kwota;
- int start = 0;
- list <lista_platnikow * > * tab[35000];
- for (int i = 0; i < 35000; i++)
- tab[i] = NULL;
- while (cin >> operacja >> placacy >> odbiorca) {
- if (operacja == PRZELEW)
- {
- int nr = shash(odbiorca);
- int p;
- cin >> p;
- Konto * k = new Konto(p, placacy);
- if (tab[nr] == NULL)
- {
- lista_platnikow * wsk = new lista_platnikow();
- wsk->nazwa = odbiorca;
- tab[nr] = new list<lista_platnikow *>();
- tab[nr]->push_back (wsk);
- Konto * konto = new Konto(p, placacy);
- wsk->push_back(konto);
- }
- else
- {
- list <lista_platnikow * > * wsk = tab[nr];
- bool czy_znaleziono_odbiorce = false;
- bool czy_znaleziono_platnika = false;
- lista_platnikow * dopisac_mu = NULL;
- for (auto lista : *wsk)
- {
- if (lista->nazwa == odbiorca)
- {
- czy_znaleziono_odbiorce = true;
- dopisac_mu = lista;
- for (auto przelew : *lista)
- {
- if (przelew->nazwa == placacy) {
- przelew->bilans += p;
- czy_znaleziono_platnika = true;
- break;
- }
- }
- }
- if (czy_znaleziono_odbiorce == true)
- break;
- }
- if (czy_znaleziono_odbiorce == false) {
- lista_platnikow * wsk = new lista_platnikow();
- wsk->nazwa = odbiorca;
- tab[nr]->push_back(wsk);
- Konto * konto = new Konto(p, placacy);
- wsk->push_back(konto);
- }
- if (czy_znaleziono_odbiorce == true && czy_znaleziono_platnika == false)
- {
- Konto * konto = new Konto(p, placacy);
- dopisac_mu->push_back(konto);
- }
- }
- }
- else
- {
- int nr = shash(odbiorca);
- if (tab[nr] == NULL)
- {
- cout << "0" << endl;
- continue;
- }
- else {
- bool znaleziono = false;
- for (auto lista : *tab[nr]) {
- if (lista->nazwa == odbiorca)
- {
- for (auto wplacil : *lista)
- {
- if (wplacil->nazwa == placacy)
- {
- cout << wplacil->bilans << endl;
- znaleziono = true;
- }
- }
- }
- }
- if (znaleziono == false)
- {
- cout << "0" << endl;
- }
- }
- }
- }
- int x;
- cin >> x;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement