Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <vector>
- #include <algorithm>
- #include <cmath>
- #include <iomanip>
- using namespace std;
- class Zawodnik
- {
- private:
- string imie;
- string nazwisko;
- double punkty;
- double ustawieniaZawodnika[3];
- double notySedziow[5];
- double ustawieniaSkoczni[4];
- int iloscZawodnikow;
- public:
- Zawodnik()
- {
- this->punkty = 0;
- }
- void UstawZawodnika()
- {
- cin >> imie >> nazwisko;
- for (int i = 0; i < 3; i++) // 1 wiatr 2 belka
- {
- cin >> ustawieniaZawodnika[i];
- }
- for (int i = 0; i < 5; i++)
- {
- cin >> notySedziow[i];
- }
- }
- void UstawSkocznie() // pkt za 1m/s wiatru || pkt za kazdy stopien belki || pkt konstrukcyjny || nr belki na start
- {
- for (int i = 0; i < 4; i++)
- {
- cin >> ustawieniaSkoczni[i];
- }
- cin >> iloscZawodnikow;
- }
- void LiczPunkty()
- {
- //punkt konstrukcyjny itp
- punkty += 60; // dodanie bazowych 60 punktow
- //cout << "Punkty etap 1: " << punkty << endl;
- double skokWlasciwy = ustawieniaZawodnika[0] - ustawieniaSkoczni[2]; // skok - punkt konstrukcyjny
- if (ustawieniaSkoczni[2] >= 60 && ustawieniaSkoczni[2] <= 100) // punk konstrukcyjny w zakresie 60 - 100
- {
- punkty += 2 * skokWlasciwy; // punkty * dlugosc skoku
- }
- else if (ustawieniaSkoczni[2] > 100 && ustawieniaSkoczni[2] <= 160) // punk konstrukcyjny w zakresie 101 - 160
- {
- punkty += 1.8 * skokWlasciwy; // punkty * dlugosc skoku
- }
- else // punk konstrukcyjny w zakresie > 160
- {
- punkty += 1.2 * skokWlasciwy; // punkty * dlugosc skoku
- }
- //cout << "Punkty etap 2: " << punkty << endl;
- //tu bedzie wiatr
- if (ustawieniaZawodnika[1] > 0) // wiatr dodatni (w plecy)
- {
- punkty += abs(ustawieniaZawodnika[1]) * ustawieniaSkoczni[0]; // sila wiatru * punkty za wiatr
- }
- else if (ustawieniaZawodnika[1] < 0) // wiatr ujemny (pod narty)
- {
- punkty -= abs(ustawieniaZawodnika[1]) * ustawieniaSkoczni[0]; // sila wiatru * punkty za wiatr
- }
- //cout << "Punkty etap 3: " << punkty << endl;
- //tu bedzie belka
- double roznicaBelki;
- if (ustawieniaZawodnika[2] > ustawieniaSkoczni[3]) // belka wyzej niz poczatkowo
- {
- roznicaBelki = ustawieniaZawodnika[2] - ustawieniaSkoczni[3];
- punkty -= roznicaBelki * ustawieniaSkoczni[1]; // belka * punkty za belke
- }
- else if (ustawieniaZawodnika[2] < ustawieniaSkoczni[3]) // belka nizej niz poczatkowo
- {
- roznicaBelki = ustawieniaSkoczni[3] - ustawieniaZawodnika[2];
- punkty += roznicaBelki * ustawieniaSkoczni[1]; // belka * punkty za belke
- }
- //cout << "Punkty etap 4: " << punkty << endl;
- //noty od sedziow
- int notaMax = distance(notySedziow, max_element(notySedziow, notySedziow + 5));
- int notaMin = distance(notySedziow, min_element(notySedziow, notySedziow + 5));
- notySedziow[notaMax] = 0; // wyzerowanie najwiekszej oceny
- notySedziow[notaMin] = 0; // wyzerowanie najmniejszej oceny
- for (int i = 0; i < 5; i++)
- {
- punkty += notySedziow[i]; // dodanie do wyniku ocen siedziow
- }
- //cout << "Punkty etap 5: " << punkty << endl;
- //cout << punkty << endl;
- }
- int GetIloscZawodnikow()
- {
- return iloscZawodnikow;
- }
- double GetPunkty()
- {
- return punkty;
- }
- void WypiszZawodnika()
- {
- cout << imie << " " << nazwisko << " ";
- cout << fixed << setprecision(1) << GetPunkty() << endl;
- }
- bool operator > (const Zawodnik inny) const
- {
- if (punkty == inny.punkty)
- {
- return (nazwisko < inny.nazwisko);
- }
- else
- return (punkty > inny.punkty);
- }
- };
- int main()
- {
- Zawodnik zawodnik;
- vector<Zawodnik> zawodnicy;
- int zestawyDanych;
- cin >> zestawyDanych;
- for (int i = 0; i < zestawyDanych; i++)
- {
- zawodnik.UstawSkocznie();
- for (int j = 0; j < zawodnik.GetIloscZawodnikow(); j++)
- {
- zawodnik.UstawZawodnika();
- zawodnicy.push_back(zawodnik);
- }
- for (int y = 0; y < zawodnicy.size(); y++)
- {
- zawodnicy[y].LiczPunkty();
- }
- sort(zawodnicy.begin(), zawodnicy.end(), greater<Zawodnik>());
- for (int x = 0; x < zawodnicy.size(); x++)
- {
- zawodnicy[x].WypiszZawodnika();
- }
- zawodnicy.clear();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement