Mitrezzz

Race

May 4th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.76 KB | None | 0 0
  1. #include <cstring>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. class Runner {
  7.     private:
  8.         char* ime;
  9.         char drzhava[50];
  10.         int minuti;
  11.         int sekundi;
  12.         int brMedali;
  13.     public:
  14.         Runner()
  15.         {
  16.             ime = new char[0];
  17.         }
  18.         ~Runner()
  19.         {
  20.             delete[] ime;
  21.         }
  22.         Runner(char* ime, char* drzhava, int minuti, int sekundi, int brMedali)
  23.         {
  24.             this->ime = new char[strlen(ime) + 1];
  25.             strcpy(this->ime, ime);
  26.             strcpy(this->drzhava, drzhava);
  27.             this->minuti = minuti;
  28.             this->sekundi = sekundi;
  29.             this->brMedali = brMedali;
  30.         }  
  31.         Runner(const Runner& r)
  32.         {
  33.             this->ime = new char[strlen(r.ime) + 1];
  34.             strcpy(this->ime,r. ime);  
  35.             strcpy(this->drzhava,r. drzhava);
  36.             this->minuti = r.minuti;
  37.             this->sekundi = r.sekundi;
  38.             this->brMedali = r.brMedali;
  39.            
  40.         }
  41.         Runner& operator=(Runner& r)
  42.         {
  43.             this->ime = new char[strlen(r.ime) + 1];
  44.             strcpy(this->ime,r. ime);  
  45.             strcpy(this->drzhava,r. drzhava);
  46.             this->minuti = r.minuti;
  47.             this->sekundi = r.sekundi;
  48.             this->brMedali = r.brMedali;
  49.             return *this;
  50.         }
  51.         Runner& operator++()
  52.         {
  53.             brMedali++;
  54.             return *this;
  55.         }
  56.         bool operator!=(Runner& r)
  57.         {
  58.             return (strcmp(drzhava, r.drzhava) == 0) ? false : true;
  59.         }
  60.         bool operator<(Runner& r)
  61.         {
  62.             if (minuti*60 + sekundi < r.minuti*60 + r.sekundi)
  63.             {
  64.                 return true;
  65.             }
  66.             return false;
  67.         }
  68.         friend ostream& operator<<(ostream& os, Runner& r)
  69.         {
  70.             os << r.ime << " - " << r.drzhava << " - " << r.minuti << ":" << r.sekundi << " - " << r.brMedali;
  71.             return os;
  72.         }
  73.         int getMinuti()
  74.         {
  75.             return minuti;
  76.         }
  77.         int getSekundi()
  78.         {
  79.             return sekundi;
  80.         }
  81. };
  82. class Race {
  83.     private:
  84.         char imeTrka[50];
  85.         Runner* trkachi;
  86.         int brTrkachi;
  87.     public:
  88.         Race()
  89.         {
  90.             trkachi = new Runner[0];
  91.             brTrkachi = 0;
  92.         }
  93.         ~Race()
  94.         {
  95.             delete[] trkachi;
  96.         }
  97.         Race(char* name)
  98.         {
  99.             strcpy(imeTrka, name);
  100.             trkachi = new Runner[0];
  101.             brTrkachi = 0;
  102.         }
  103.         Race(const Race& r)
  104.         {
  105.             strcpy(this->imeTrka, r.imeTrka);
  106.             Runner* tmp = new Runner[r.brTrkachi];
  107.             for (int i = 0; i < r.brTrkachi; i++)
  108.             {
  109.                 tmp[i] = r.trkachi[i];
  110.             }
  111.             brTrkachi = r.brTrkachi;
  112.             trkachi = tmp;
  113.         }
  114.         Race& operator=(Race& r)
  115.         {
  116.             strcpy(this->imeTrka, r.imeTrka);
  117.             Runner* tmp = new Runner[r.brTrkachi];
  118.             for (int i = 0; i < r.brTrkachi; i++)
  119.             {
  120.                 tmp[i] = r.trkachi[i];
  121.             }
  122.             delete[] trkachi;
  123.             brTrkachi = r.brTrkachi;
  124.             trkachi = tmp;
  125.             return *this;
  126.  
  127.         }
  128.         // overload na prefiksan ++( ++x)
  129.         Race& operator++()
  130.         {
  131.             int index = -1, vreme = 100000;
  132.             for (int i = 0; i < brTrkachi; i++)
  133.             {
  134.                 int time = trkachi[i].getMinuti()*60 + trkachi[i].getSekundi();
  135.                 if (vreme > time)
  136.                 {
  137.                     index = i;
  138.                     vreme = time;
  139.                 }
  140.             }
  141.             ++trkachi[index];
  142.             return *this;
  143.         }
  144.         // overload na postfiksan ++( x++)
  145.         Race/* ne stavjamo referencu */ operator++(int)
  146.         {
  147.             Race nova(*this);
  148.             /*
  149.             *
  150.             *
  151.             */
  152.             return nova;
  153.         }
  154.         Race& operator+=(Runner& r)
  155.         {
  156.             Runner* tmp = new Runner[brTrkachi + 1];
  157.             for (int i = 0; i < brTrkachi; i++)
  158.             {
  159.                 tmp[i] = trkachi[i];
  160.             }
  161.             tmp[brTrkachi++] = r;
  162.             delete[] trkachi;
  163.             trkachi = tmp;
  164.             return *this;
  165.         }
  166.         friend ostream& operator<<(ostream& os, Race& r)
  167.         {
  168.             os << r.imeTrka << ":" << endl;
  169.             for (int i = 0; i < r.brTrkachi; i++)
  170.             {
  171.                 os << r.trkachi[i] << endl;
  172.             }
  173.             return os;
  174.         }
  175.         Race& operator-=(Runner& r)
  176.         {
  177.             int nemaDaSeBrishev = 0;
  178.             for (int i = 0; i < brTrkachi; i++)
  179.             {
  180.                 if (trkachi[i] != r)
  181.                 {
  182.                     nemaDaSeBrishev++;
  183.                 }
  184.             }
  185.             Runner* tmp = new Runner[nemaDaSeBrishev];
  186.             int tmpCnt = 0;
  187.             for (int i = 0; i  < brTrkachi; i++)
  188.             {
  189.                 if (trkachi[i] != r)
  190.                 {
  191.                     tmp[tmpCnt++] = trkachi[i];
  192.                 }
  193.             }
  194.             brTrkachi = tmpCnt;
  195.             delete[] trkachi;
  196.             trkachi = tmp;
  197.             return *this;
  198.         }
  199. };
  200.  
  201.  
  202. int main() {
  203.  
  204. int n;
  205. cin >> n;
  206.  
  207. char nameRace[50];
  208. cin >> nameRace;
  209.  
  210. Race race = Race(nameRace);
  211. int m;
  212. cin >> m;
  213.  
  214. char name[50];
  215. char country[50];
  216. int minutes;
  217. int seconds;
  218. int numberOfMedals;
  219. for (int i=0; i < m; ++i) {
  220.   cin >> name;
  221.   cin >> country;
  222.   cin >> minutes;
  223.   cin >> seconds;
  224.   cin >> numberOfMedals;
  225.   Runner r = Runner(name,country,minutes,seconds,numberOfMedals);
  226.   race += r;
  227. }
  228. cout << race;
  229.  
  230. if (n == 1) {
  231.   ++race;
  232.   cout << race;
  233. }
  234. else if (n == 2) {
  235.   cin >> name;
  236.   cin >> country;
  237.   cin >> minutes;
  238.   cin >> seconds;
  239.   cin >> numberOfMedals;
  240.   Runner r = Runner(name,country,minutes,seconds,numberOfMedals);
  241.   race -= r;
  242.   cout << race;
  243. }
  244. else if (n == 3) {
  245.   cin >> name;
  246.   cin >> country;
  247.   cin >> minutes;
  248.   cin >> seconds;
  249.   cin >> numberOfMedals;
  250.   Runner r = Runner(name,country,minutes,seconds,numberOfMedals);
  251.   race -= r;
  252.   ++race;
  253.   cout << race;
  254. }
  255. }
Add Comment
Please, Sign In to add comment