Advertisement
Guest User

Untitled

a guest
May 24th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.04 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <cmath>
  6. #include <iomanip>
  7. using namespace std;
  8.  
  9. class Zawodnik
  10. {
  11. private:
  12.     string imie;
  13.     string nazwisko;
  14.     double punkty;
  15.     double ustawieniaZawodnika[3];
  16.     double notySedziow[5];
  17.     double ustawieniaSkoczni[4];
  18.     int iloscZawodnikow;
  19. public:
  20.     Zawodnik()
  21.     {
  22.         this->punkty = 0;
  23.     }
  24.     void UstawZawodnika()
  25.     {
  26.         cin >> imie >> nazwisko;
  27.         for (int i = 0; i < 3; i++) // 1 wiatr 2 belka
  28.         {
  29.             cin >> ustawieniaZawodnika[i];
  30.         }
  31.         for (int i = 0; i < 5; i++)
  32.         {
  33.             cin >> notySedziow[i];
  34.         }
  35.     }
  36.     void UstawSkocznie() // pkt za 1m/s wiatru || pkt za kazdy stopien belki || pkt konstrukcyjny || nr belki na start
  37.     {
  38.         for (int i = 0; i < 4; i++)
  39.         {
  40.             cin >> ustawieniaSkoczni[i];
  41.         }
  42.         cin >> iloscZawodnikow;
  43.     }
  44.     void LiczPunkty()
  45.     {
  46.         //punkt konstrukcyjny itp
  47.         punkty += 60; // dodanie bazowych 60 punktow
  48.         //cout << "Punkty etap 1: " << punkty << endl;
  49.         double skokWlasciwy = ustawieniaZawodnika[0] - ustawieniaSkoczni[2]; // skok - punkt konstrukcyjny
  50.         if (ustawieniaSkoczni[2] >= 60 && ustawieniaSkoczni[2] <= 100) // punk konstrukcyjny w zakresie 60 - 100
  51.         {
  52.             punkty += 2 * skokWlasciwy; // punkty * dlugosc skoku
  53.         }
  54.         else if (ustawieniaSkoczni[2] > 100 && ustawieniaSkoczni[2] <= 160) // punk konstrukcyjny w zakresie 101 - 160
  55.         {
  56.             punkty += 1.8 * skokWlasciwy; // punkty * dlugosc skoku
  57.         }
  58.         else // punk konstrukcyjny w zakresie > 160
  59.         {
  60.             punkty += 1.2 * skokWlasciwy; // punkty * dlugosc skoku
  61.         }
  62.         //cout << "Punkty etap 2: " << punkty << endl;
  63.         //tu bedzie wiatr
  64.         if (ustawieniaZawodnika[1] > 0) // wiatr dodatni (w plecy)
  65.         {
  66.             punkty += abs(ustawieniaZawodnika[1]) * ustawieniaSkoczni[0]; // sila wiatru * punkty za wiatr
  67.         }
  68.         else if (ustawieniaZawodnika[1] < 0) // wiatr ujemny (pod narty)
  69.         {
  70.             punkty -= abs(ustawieniaZawodnika[1]) * ustawieniaSkoczni[0]; // sila wiatru * punkty za wiatr
  71.         }
  72.         //cout << "Punkty etap 3: " << punkty << endl;
  73.         //tu bedzie belka
  74.         double roznicaBelki;
  75.         if (ustawieniaZawodnika[2] > ustawieniaSkoczni[3]) // belka wyzej niz poczatkowo
  76.         {
  77.             roznicaBelki = ustawieniaZawodnika[2] - ustawieniaSkoczni[3];
  78.             punkty -= roznicaBelki * ustawieniaSkoczni[1]; // belka * punkty za belke
  79.         }
  80.         else if (ustawieniaZawodnika[2] < ustawieniaSkoczni[3]) // belka nizej niz poczatkowo
  81.         {
  82.             roznicaBelki = ustawieniaSkoczni[3] - ustawieniaZawodnika[2];
  83.             punkty += roznicaBelki * ustawieniaSkoczni[1]; // belka * punkty za belke
  84.         }
  85.         //cout << "Punkty etap 4: " << punkty << endl;
  86.         //noty od sedziow
  87.         int notaMax = distance(notySedziow, max_element(notySedziow, notySedziow + 5));
  88.         int notaMin = distance(notySedziow, min_element(notySedziow, notySedziow + 5));
  89.         notySedziow[notaMax] = 0; // wyzerowanie najwiekszej oceny
  90.         notySedziow[notaMin] = 0; // wyzerowanie najmniejszej oceny
  91.         for (int i = 0; i < 5; i++)
  92.         {
  93.             punkty += notySedziow[i]; // dodanie do wyniku ocen siedziow
  94.         }
  95.         //cout << "Punkty etap 5: " << punkty << endl;
  96.         //cout << punkty << endl;
  97.     }
  98.     int GetIloscZawodnikow()
  99.     {
  100.         return iloscZawodnikow;
  101.     }
  102.     double GetPunkty()
  103.     {
  104.         return punkty;
  105.     }
  106.     void WypiszZawodnika()
  107.     {
  108.         cout << imie << " " << nazwisko << " ";
  109.         cout << fixed << setprecision(1) << GetPunkty() << endl;
  110.     }
  111.     bool operator > (const Zawodnik inny) const
  112.     {
  113.         if (punkty == inny.punkty)
  114.         {
  115.             return (nazwisko < inny.nazwisko);
  116.         }
  117.         else
  118.             return (punkty > inny.punkty);
  119.     }
  120. };
  121.  
  122. int main()
  123. {
  124.     Zawodnik zawodnik;
  125.     vector<Zawodnik> zawodnicy;
  126.     int zestawyDanych;
  127.     cin >> zestawyDanych;
  128.     for (int i = 0; i < zestawyDanych; i++)
  129.     {
  130.         zawodnik.UstawSkocznie();
  131.         for (int j = 0; j < zawodnik.GetIloscZawodnikow(); j++)
  132.         {
  133.             zawodnik.UstawZawodnika();
  134.             zawodnicy.push_back(zawodnik);
  135.         }
  136.         for (int y = 0; y < zawodnicy.size(); y++)
  137.         {
  138.             zawodnicy[y].LiczPunkty();
  139.         }
  140.         sort(zawodnicy.begin(), zawodnicy.end(), greater<Zawodnik>());
  141.         for (int x = 0; x < zawodnicy.size(); x++)
  142.         {
  143.             zawodnicy[x].WypiszZawodnika();
  144.         }
  145.         zawodnicy.clear();
  146.     }
  147. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement