#include <iostream> #include <vector> //#include <bits/stdc++.h> //#include <algorithm> using namespace std; struct Klocek { int wysokosc = 0; int wzorek = 0; short roznica = 0; }; int main() { int liczbaKlockow = 0; int pojedynczaKara = 0; cin >> liczbaKlockow >> pojedynczaKara; //wczytanie danych klockow std::vector<Klocek> klocki; for (int i = 0; i < liczbaKlockow; ++i) { Klocek klocek; cin >> klocek.wysokosc >> klocek.wzorek; if (klocki.size() > 0 && klocek.wzorek != klocki.back().wzorek) { klocki.back().roznica++; klocek.roznica++; } klocki.push_back(klocek); } klocki = vector<Klocek>(klocki.rbegin(), klocki.rend()); long long ocena = 0; int analizowanyKlocekDoDodania = 1; for (int i = 0; i < klocki.size() - 1; ++i) { if (klocki[i].wzorek == klocki[analizowanyKlocekDoDodania].wzorek) { ocena += klocki[i].wysokosc; analizowanyKlocekDoDodania++; } else if (klocki[i].wzorek != klocki[analizowanyKlocekDoDodania].wzorek && pojedynczaKara < klocki[analizowanyKlocekDoDodania].wysokosc) { ocena += klocki[i].wysokosc - pojedynczaKara; analizowanyKlocekDoDodania++; } else { if (i > 0 && klocki[analizowanyKlocekDoDodania].wzorek != klocki[i - 1].wzorek) { klocki.erase(klocki.begin() + analizowanyKlocekDoDodania); i--; } else if (i == 0 && klocki.size() > 2 && klocki[analizowanyKlocekDoDodania].wzorek == klocki[analizowanyKlocekDoDodania + 1].wzorek) { klocki.erase(klocki.begin() + i); i--; } else if (i == 0 && klocki.size() > 2 && klocki[analizowanyKlocekDoDodania].wzorek != klocki[analizowanyKlocekDoDodania + 1].wzorek) { klocki.erase(klocki.begin() + analizowanyKlocekDoDodania); i--; } else if (i > 0 && klocki[analizowanyKlocekDoDodania].wzorek == klocki[i - 1].wzorek) { if (klocki[i].wysokosc <= klocki[i - 1].wysokosc + klocki[analizowanyKlocekDoDodania].wysokosc) { klocki.erase(klocki.begin() + i); i--; } } } } cout << ocena; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | #include <iostream> #include <vector> //#include <bits/stdc++.h> //#include <algorithm> using namespace std; struct Klocek { int wysokosc = 0; int wzorek = 0; short roznica = 0; }; int main() { int liczbaKlockow = 0; int pojedynczaKara = 0; cin >> liczbaKlockow >> pojedynczaKara; //wczytanie danych klockow std::vector<Klocek> klocki; for (int i = 0; i < liczbaKlockow; ++i) { Klocek klocek; cin >> klocek.wysokosc >> klocek.wzorek; if (klocki.size() > 0 && klocek.wzorek != klocki.back().wzorek) { klocki.back().roznica++; klocek.roznica++; } klocki.push_back(klocek); } klocki = vector<Klocek>(klocki.rbegin(), klocki.rend()); long long ocena = 0; int analizowanyKlocekDoDodania = 1; for (int i = 0; i < klocki.size() - 1; ++i) { if (klocki[i].wzorek == klocki[analizowanyKlocekDoDodania].wzorek) { ocena += klocki[i].wysokosc; analizowanyKlocekDoDodania++; } else if (klocki[i].wzorek != klocki[analizowanyKlocekDoDodania].wzorek && pojedynczaKara < klocki[analizowanyKlocekDoDodania].wysokosc) { ocena += klocki[i].wysokosc - pojedynczaKara; analizowanyKlocekDoDodania++; } else { if (i > 0 && klocki[analizowanyKlocekDoDodania].wzorek != klocki[i - 1].wzorek) { klocki.erase(klocki.begin() + analizowanyKlocekDoDodania); i--; } else if (i == 0 && klocki.size() > 2 && klocki[analizowanyKlocekDoDodania].wzorek == klocki[analizowanyKlocekDoDodania + 1].wzorek) { klocki.erase(klocki.begin() + i); i--; } else if (i == 0 && klocki.size() > 2 && klocki[analizowanyKlocekDoDodania].wzorek != klocki[analizowanyKlocekDoDodania + 1].wzorek) { klocki.erase(klocki.begin() + analizowanyKlocekDoDodania); i--; } else if (i > 0 && klocki[analizowanyKlocekDoDodania].wzorek == klocki[i - 1].wzorek) { if (klocki[i].wysokosc <= klocki[i - 1].wysokosc + klocki[analizowanyKlocekDoDodania].wysokosc) { klocki.erase(klocki.begin() + i); i--; } } } } cout << ocena; } |