/* * boh.cpp * * Created on: 14 maj 2014 * Author: Andrzej */ #include <iostream> #include <vector> #include <algorithm> typedef long long LL; struct potwor { int poz; int obr; int eli; }; int kol[100000]; std::vector <potwor> plus; std::vector <potwor> minus; bool sort_nar(const potwor & a, const potwor & b) { return a.obr < b.obr; } bool sort_mal(const potwor & a, const potwor & b) { return a.eli > b.eli; } int main() { LL zycie; int ilosc; potwor p; std::cin >> ilosc >> zycie; for (int i = 0; i < ilosc; ++i) { std::cin >> p.obr >> p.eli; p.poz = i+1; if (p.eli >= p.obr) plus.push_back(p); else minus.push_back(p); } sort(plus.begin(), plus.end(), sort_nar); sort(minus.begin(), minus.end(), sort_mal); bool ok = true; int poz = 0; for (std::vector<potwor>::iterator it = plus.begin(); it != plus.end(); ++it) { //std::cout << zycie << ' '; zycie -= it->obr; if (zycie > 0) { zycie += it->eli; kol[poz++] = it->poz; //std::cout << it->obr << ' ' << it->eli << std::endl; } else { ok = false; break; } } if (ok) for (std::vector<potwor>::iterator it = minus.begin(); it != minus.end(); ++it) { //std::cout << zycie << ' '; zycie -= it->obr; if (zycie > 0) { zycie += it->eli; kol[poz++] = it->poz; //std::cout << it->obr << ' ' << it->eli << std::endl; } else { ok = false; break; } } if (ok) { std::cout << "TAK\n"; for (int i = 0; i < ilosc; ++i) std::cout << kol[i] << ' '; std::cout << std::endl; } else std::cout << "NIE\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 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | /* * boh.cpp * * Created on: 14 maj 2014 * Author: Andrzej */ #include <iostream> #include <vector> #include <algorithm> typedef long long LL; struct potwor { int poz; int obr; int eli; }; int kol[100000]; std::vector <potwor> plus; std::vector <potwor> minus; bool sort_nar(const potwor & a, const potwor & b) { return a.obr < b.obr; } bool sort_mal(const potwor & a, const potwor & b) { return a.eli > b.eli; } int main() { LL zycie; int ilosc; potwor p; std::cin >> ilosc >> zycie; for (int i = 0; i < ilosc; ++i) { std::cin >> p.obr >> p.eli; p.poz = i+1; if (p.eli >= p.obr) plus.push_back(p); else minus.push_back(p); } sort(plus.begin(), plus.end(), sort_nar); sort(minus.begin(), minus.end(), sort_mal); bool ok = true; int poz = 0; for (std::vector<potwor>::iterator it = plus.begin(); it != plus.end(); ++it) { //std::cout << zycie << ' '; zycie -= it->obr; if (zycie > 0) { zycie += it->eli; kol[poz++] = it->poz; //std::cout << it->obr << ' ' << it->eli << std::endl; } else { ok = false; break; } } if (ok) for (std::vector<potwor>::iterator it = minus.begin(); it != minus.end(); ++it) { //std::cout << zycie << ' '; zycie -= it->obr; if (zycie > 0) { zycie += it->eli; kol[poz++] = it->poz; //std::cout << it->obr << ' ' << it->eli << std::endl; } else { ok = false; break; } } if (ok) { std::cout << "TAK\n"; for (int i = 0; i < ilosc; ++i) std::cout << kol[i] << ' '; std::cout << std::endl; } else std::cout << "NIE\n"; return 0; } |