Advertisement
Guest User

Pzdr

a guest
May 21st, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.80 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <list>
  4. #include <cmath>
  5. using namespace std;
  6. #define PRZELEW '+'
  7. #define WYSWIETL '?'
  8.  
  9. class Konto {
  10. public:
  11.     Konto(const  int & b, const  string & a) {
  12.         nazwa = a;
  13.         bilans = b;
  14.     }
  15.     string nazwa;
  16.     int bilans;
  17. };
  18. int shash(const string & tekst)
  19. {
  20.     int val = 0;
  21.     for (int i = 0; i < tekst.length(); i++)
  22.             val += pow((tekst[i]%2),i);
  23.     return val;
  24. }
  25.  
  26. class lista_platnikow :public list < Konto *> {
  27. public:
  28.     lista_platnikow() :list<Konto *>() {};
  29.     string nazwa;
  30.     ~lista_platnikow() {
  31.         while (size() != 0)
  32.         {
  33.             delete back();
  34.             pop_back();
  35.         }
  36.     }
  37. };
  38.  
  39. int main() {
  40.     char operacja;
  41.     string placacy, odbiorca;
  42.     int kwota;
  43.     int start = 0;
  44.     list <lista_platnikow * > * tab[35000];
  45.     for (int i = 0; i < 35000; i++)
  46.         tab[i] = NULL;
  47.    
  48.     while (cin >> operacja >> placacy >> odbiorca) {
  49.         if (operacja == PRZELEW)
  50.         {
  51.             int nr = shash(odbiorca);
  52.             int p;
  53.             cin >> p;
  54.             Konto * k = new Konto(p, placacy);
  55.             if (tab[nr] == NULL)
  56.             {
  57.                 lista_platnikow * wsk = new lista_platnikow();
  58.                 wsk->nazwa = odbiorca;
  59.                 tab[nr] = new list<lista_platnikow *>();
  60.                 tab[nr]->push_back (wsk);
  61.                 Konto * konto = new Konto(p, placacy);
  62.                 wsk->push_back(konto);
  63.             }
  64.             else
  65.             {
  66.                 list <lista_platnikow * > * wsk = tab[nr];
  67.                 bool czy_znaleziono_odbiorce = false;
  68.                 bool czy_znaleziono_platnika = false;
  69.                 lista_platnikow * dopisac_mu = NULL;
  70.                 for (auto lista : *wsk)
  71.                 {
  72.                     if (lista->nazwa == odbiorca)
  73.                     {
  74.                         czy_znaleziono_odbiorce = true;
  75.                         dopisac_mu = lista;
  76.                         for (auto przelew : *lista)
  77.                         {
  78.                             if (przelew->nazwa == placacy) {
  79.                                 przelew->bilans += p;
  80.                                 czy_znaleziono_platnika = true;
  81.                                 break;
  82.                             }
  83.                         }
  84.                     }
  85.                     if (czy_znaleziono_odbiorce == true)
  86.                         break;
  87.                 }
  88.  
  89.                 if (czy_znaleziono_odbiorce == false) {
  90.                     lista_platnikow * wsk = new lista_platnikow();
  91.                     wsk->nazwa = odbiorca;
  92.                     tab[nr]->push_back(wsk);
  93.                     Konto * konto = new Konto(p, placacy);
  94.                     wsk->push_back(konto);
  95.                 }
  96.                 if (czy_znaleziono_odbiorce == true && czy_znaleziono_platnika == false)
  97.                 {
  98.                     Konto * konto = new Konto(p, placacy);
  99.                     dopisac_mu->push_back(konto);
  100.                 }
  101.             }
  102.         }
  103.         else
  104.         {
  105.             int nr = shash(odbiorca);
  106.             if (tab[nr] == NULL)
  107.             {
  108.                 cout << "0" << endl;
  109.                 continue;
  110.             }
  111.             else {
  112.                 bool znaleziono = false;
  113.                 for (auto lista : *tab[nr]) {
  114.                     if (lista->nazwa == odbiorca)
  115.                     {
  116.                         for (auto wplacil : *lista)
  117.                         {
  118.                             if (wplacil->nazwa == placacy)
  119.                             {
  120.                                 cout << wplacil->bilans << endl;
  121.                                 znaleziono = true;
  122.                             }
  123.                         }
  124.                     }
  125.  
  126.                 }
  127.                 if (znaleziono == false)
  128.                 {
  129.                     cout << "0" << endl;
  130.                 }
  131.            
  132.             }
  133.         }
  134.     }
  135.  
  136.     int x;
  137.     cin >> x;
  138.  
  139.     return 0;
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement