#include <cstdio> #include <vector> #include <algorithm> using namespace std; struct Monster { int no; int lost; int won; }; struct PositiveComp { public: bool operator()(const Monster& m1, const Monster& m2) { if (m1.lost == m2.lost) { return m1.won > m2.won; } return m1.lost < m2.lost; } }; struct NegativeComp { public: bool operator()(const Monster& m1, const Monster& m2) { if (m1.won == m2.won) { return m1.lost > m2.lost; } return m1.won > m2.won; } }; int main() { vector<Monster> negative; vector<Monster> positive; int n; long long int z; scanf("%d %lld", &n, &z); for (int i = 1; i <= n; ++i) { Monster m; m.no = i; scanf("%d %d", &m.lost, &m.won); if (m.lost >= m.won) { negative.push_back(m); } else { positive.push_back(m); } } sort(positive.begin(), positive.end(), PositiveComp()); sort(negative.begin(), negative.end(), NegativeComp()); for (vector<Monster>::iterator it = positive.begin(); it != positive.end(); ++it) { z -= it->lost; if (z <= 0) { printf("NIE\n"); return 0; } z += it->won; } for (vector<Monster>::iterator it = negative.begin(); it != negative.end(); ++it) { z -= it->lost; if (z <= 0) { printf("NIE\n"); return 0; } z += it->won; } printf("TAK\n"); for (vector<Monster>::iterator it = positive.begin(); it != positive.end(); ++it) { printf("%d ", it->no); } for (vector<Monster>::iterator it = negative.begin(); it != negative.end(); ++it) { printf("%d ", it->no); } 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 | #include <cstdio> #include <vector> #include <algorithm> using namespace std; struct Monster { int no; int lost; int won; }; struct PositiveComp { public: bool operator()(const Monster& m1, const Monster& m2) { if (m1.lost == m2.lost) { return m1.won > m2.won; } return m1.lost < m2.lost; } }; struct NegativeComp { public: bool operator()(const Monster& m1, const Monster& m2) { if (m1.won == m2.won) { return m1.lost > m2.lost; } return m1.won > m2.won; } }; int main() { vector<Monster> negative; vector<Monster> positive; int n; long long int z; scanf("%d %lld", &n, &z); for (int i = 1; i <= n; ++i) { Monster m; m.no = i; scanf("%d %d", &m.lost, &m.won); if (m.lost >= m.won) { negative.push_back(m); } else { positive.push_back(m); } } sort(positive.begin(), positive.end(), PositiveComp()); sort(negative.begin(), negative.end(), NegativeComp()); for (vector<Monster>::iterator it = positive.begin(); it != positive.end(); ++it) { z -= it->lost; if (z <= 0) { printf("NIE\n"); return 0; } z += it->won; } for (vector<Monster>::iterator it = negative.begin(); it != negative.end(); ++it) { z -= it->lost; if (z <= 0) { printf("NIE\n"); return 0; } z += it->won; } printf("TAK\n"); for (vector<Monster>::iterator it = positive.begin(); it != positive.end(); ++it) { printf("%d ", it->no); } for (vector<Monster>::iterator it = negative.begin(); it != negative.end(); ++it) { printf("%d ", it->no); } return 0; } |