#include<algorithm> #include<iostream> #include<vector> struct Monster { unsigned d, a, p; Monster(unsigned d, unsigned a, unsigned p): d(d), a(a - d), p(p) {} bool operator<(const Monster &m) const { return d < m.d; } }; bool check(unsigned z, const std::vector<Monster> &plus, const std::vector<Monster> &minus) { for(std::vector<Monster>::const_iterator it = plus.cbegin(); it != plus.cend(); ++it) { if(z <= it->d) return false; z += it->a; } for(std::vector<Monster>::const_iterator it = minus.cbegin(); it != minus.cend(); ++it) z -= it->a; if(static_cast<int>(z) < 0) return false; for(std::vector<Monster>::const_iterator it = minus.cbegin(); it != minus.cend(); ++it) { if(z <= it->d) return false; z += it->a; } return true; } int main() { std::ios_base::sync_with_stdio(false); unsigned n, z; std::cin >> n >> z; std::vector<Monster> plus, minus; for(unsigned i = 1; i <= n; ++i) { unsigned d, a; std::cin >> d >> a; if(d <= a) plus.emplace_back(d, a, i); else minus.emplace_back(a, d, i); } std::sort(plus.begin(), plus.end()); std::sort(minus.begin(), minus.end()); if(check(z, plus, minus)) { std::cout << "TAK" << std::endl; for(std::vector<Monster>::const_iterator it = plus.cbegin(); it != plus.cend(); ++it) std::cout << it->p << ' '; for(std::vector<Monster>::const_reverse_iterator it = minus.crbegin(); it != minus.crend(); ++it) std::cout << it->p << ' '; std::cout << std::endl; } else std::cout << "NIE" << std::endl; 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 | #include<algorithm> #include<iostream> #include<vector> struct Monster { unsigned d, a, p; Monster(unsigned d, unsigned a, unsigned p): d(d), a(a - d), p(p) {} bool operator<(const Monster &m) const { return d < m.d; } }; bool check(unsigned z, const std::vector<Monster> &plus, const std::vector<Monster> &minus) { for(std::vector<Monster>::const_iterator it = plus.cbegin(); it != plus.cend(); ++it) { if(z <= it->d) return false; z += it->a; } for(std::vector<Monster>::const_iterator it = minus.cbegin(); it != minus.cend(); ++it) z -= it->a; if(static_cast<int>(z) < 0) return false; for(std::vector<Monster>::const_iterator it = minus.cbegin(); it != minus.cend(); ++it) { if(z <= it->d) return false; z += it->a; } return true; } int main() { std::ios_base::sync_with_stdio(false); unsigned n, z; std::cin >> n >> z; std::vector<Monster> plus, minus; for(unsigned i = 1; i <= n; ++i) { unsigned d, a; std::cin >> d >> a; if(d <= a) plus.emplace_back(d, a, i); else minus.emplace_back(a, d, i); } std::sort(plus.begin(), plus.end()); std::sort(minus.begin(), minus.end()); if(check(z, plus, minus)) { std::cout << "TAK" << std::endl; for(std::vector<Monster>::const_iterator it = plus.cbegin(); it != plus.cend(); ++it) std::cout << it->p << ' '; for(std::vector<Monster>::const_reverse_iterator it = minus.crbegin(); it != minus.crend(); ++it) std::cout << it->p << ' '; std::cout << std::endl; } else std::cout << "NIE" << std::endl; return 0; } |