#include <iostream> #include <vector> #include <climits> #include <algorithm> using std::cin; using std::cout; using std::endl; using std::vector; struct plecak { int miejsce; int wolne_miejsce; }; vector<int> przedmioty; vector<plecak> plecaki; typename vector<plecak>::iterator prz_it; int main() { std::ios_base::sync_with_stdio(0); int ilosc_przedmiotow, ilosc_plecakow; cin >> ilosc_przedmiotow >> ilosc_plecakow; int tmp; while(ilosc_przedmiotow--) { cin >> tmp; przedmioty.push_back(tmp); } std::sort(przedmioty.begin(), przedmioty.end(), [](int const& a, int const& b) { return a > b; }); while(ilosc_plecakow--) { cin >> tmp; plecak p {tmp, tmp}; plecaki.push_back(p); } std::sort(plecaki.begin(), plecaki.end(), [](plecak const& a, plecak const& b) { return a.miejsce > b.miejsce; }); int waga_prz; bool dodano; vector<int>::iterator prz_it = przedmioty.begin(); int plec_size = plecaki.size(); while(prz_it != przedmioty.end()) { waga_prz = *prz_it; dodano = false; for(int i = 0; i < plec_size; ++i) { if(plecaki[i].wolne_miejsce - waga_prz >= 0) { plecaki[i].wolne_miejsce -= waga_prz; prz_it = przedmioty.erase(prz_it); dodano = true; break; } } if(!dodano) { cout << "NIE\n"; return 0; } } int ile_plecakow = 0; for(plecak p : plecaki) { if(p.wolne_miejsce != p.miejsce) { ++ile_plecakow; } } cout << ile_plecakow << "\n"; return 0; }
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 | #include <iostream> #include <vector> #include <climits> #include <algorithm> using std::cin; using std::cout; using std::endl; using std::vector; struct plecak { int miejsce; int wolne_miejsce; }; vector<int> przedmioty; vector<plecak> plecaki; typename vector<plecak>::iterator prz_it; int main() { std::ios_base::sync_with_stdio(0); int ilosc_przedmiotow, ilosc_plecakow; cin >> ilosc_przedmiotow >> ilosc_plecakow; int tmp; while(ilosc_przedmiotow--) { cin >> tmp; przedmioty.push_back(tmp); } std::sort(przedmioty.begin(), przedmioty.end(), [](int const& a, int const& b) { return a > b; }); while(ilosc_plecakow--) { cin >> tmp; plecak p {tmp, tmp}; plecaki.push_back(p); } std::sort(plecaki.begin(), plecaki.end(), [](plecak const& a, plecak const& b) { return a.miejsce > b.miejsce; }); int waga_prz; bool dodano; vector<int>::iterator prz_it = przedmioty.begin(); int plec_size = plecaki.size(); while(prz_it != przedmioty.end()) { waga_prz = *prz_it; dodano = false; for(int i = 0; i < plec_size; ++i) { if(plecaki[i].wolne_miejsce - waga_prz >= 0) { plecaki[i].wolne_miejsce -= waga_prz; prz_it = przedmioty.erase(prz_it); dodano = true; break; } } if(!dodano) { cout << "NIE\n"; return 0; } } int ile_plecakow = 0; for(plecak p : plecaki) { if(p.wolne_miejsce != p.miejsce) { ++ile_plecakow; } } cout << ile_plecakow << "\n"; return 0; } |