#include <cstdio> #include <vector> #include <algorithm> struct v { int a, b, c; inline bool operator < (const v& A) const { return (a < A.a); } }; v makeV(const int& first, const int& second, const int& where) { v Test; Test.a = first; Test.b = second; Test.c = where; return Test; } void read(int n = 0, int m = 0) { scanf("%d%d", &n, &m); std::vector<v> Pluses, Minuses; int lost, achieved; for (int i = 0; i < n; ++i) { scanf("%d%d", &lost, &achieved); if (lost > achieved) Minuses.push_back(makeV(-1 * achieved, lost, i)); else Pluses.push_back(makeV(lost, achieved, i)); } std::sort(Pluses.begin(), Pluses.end()); std::sort(Minuses.begin(), Minuses.end()); int k = Minuses.size(); for (int i = 0; i < k; ++i) Minuses[i].a *= -1; std::vector<int> Answer; k = Pluses.size(); for (int i = 0; i < k; ++i) if (Pluses[i].a < m) { m += Pluses[i].b - Pluses[i].a; Answer.push_back(Pluses[i].c); } else { printf("NIE"); goto end; } k = Minuses.size(); for (int i = 0; i < k; ++i) if (Minuses[i].b < m) { m += Minuses[i].a - Minuses[i].b; Answer.push_back(Minuses[i].c); } else { printf("NIE"); goto end; } printf("TAK\n"); k = Answer.size(); for (int i = 0; i < k; ++i) printf("%d ", Answer[i] + 1); end: printf("\n"); } int main() { read(); 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 | #include <cstdio> #include <vector> #include <algorithm> struct v { int a, b, c; inline bool operator < (const v& A) const { return (a < A.a); } }; v makeV(const int& first, const int& second, const int& where) { v Test; Test.a = first; Test.b = second; Test.c = where; return Test; } void read(int n = 0, int m = 0) { scanf("%d%d", &n, &m); std::vector<v> Pluses, Minuses; int lost, achieved; for (int i = 0; i < n; ++i) { scanf("%d%d", &lost, &achieved); if (lost > achieved) Minuses.push_back(makeV(-1 * achieved, lost, i)); else Pluses.push_back(makeV(lost, achieved, i)); } std::sort(Pluses.begin(), Pluses.end()); std::sort(Minuses.begin(), Minuses.end()); int k = Minuses.size(); for (int i = 0; i < k; ++i) Minuses[i].a *= -1; std::vector<int> Answer; k = Pluses.size(); for (int i = 0; i < k; ++i) if (Pluses[i].a < m) { m += Pluses[i].b - Pluses[i].a; Answer.push_back(Pluses[i].c); } else { printf("NIE"); goto end; } k = Minuses.size(); for (int i = 0; i < k; ++i) if (Minuses[i].b < m) { m += Minuses[i].a - Minuses[i].b; Answer.push_back(Minuses[i].c); } else { printf("NIE"); goto end; } printf("TAK\n"); k = Answer.size(); for (int i = 0; i < k; ++i) printf("%d ", Answer[i] + 1); end: printf("\n"); } int main() { read(); return 0; } |