#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; } |
English