#define __STDC_FORMAT_MACROS #include <inttypes.h> #include <cstdio> #include <queue> #include <list> #define MIN(a,b) ((a) < (b)) ? (a) : (b) #define MAX(a,b) ((a) > (b)) ? (a) : (b) struct Potwor { uint32_t i, d, a; }; struct Dodatni : Potwor { Dodatni(const Potwor& a) : Potwor(a) {}; }; struct Ujemny : Potwor { Ujemny(const Potwor& a) : Potwor(a) {}; }; bool operator<(Dodatni a, Dodatni b) { return a.d > b.d; } bool operator<(Ujemny a, Ujemny b) { return a.a < b.a; } using namespace std; int main(void) { uint32_t n, z; priority_queue<Dodatni> d; priority_queue<Ujemny> u; list<uint32_t> h; scanf("%" SCNu32 " %" SCNu32, &n, &z); for (int i = 0; i < n; i++) { Potwor x; x.i = i; scanf("%" SCNu32 " %" SCNu32, &x.d, &x.a); if (x.d < x.a) { Dodatni y(x); d.push(y); } else { Ujemny y(x); u.push(y); } } uint64_t s = z; while (!d.empty()) { Dodatni x = d.top(); d.pop(); if (x.d >= s) { printf("NIE\n"); return 0; } s += x.a; s -= x.d; h.push_back(x.i); // printf("d %d %d (%d)\n", x.d, x.a, x.i); } while(!u.empty()) { Ujemny y = u.top(); u.pop(); if (y.d >= s) { printf("NIE\n"); return 0; } s -= y.d; s += y.a; h.push_back(y.i); // printf("u %d %d (%d) %d %d\n", y.d, y.a, y.i, -y.d+y.a, s); } printf("TAK\n"); while (!h.empty()) { uint32_t i = h.front(); h.pop_front(); printf("%" PRIu32 "%c", i + 1, h.empty() ? '\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 93 94 95 96 97 98 99 100 101 | #define __STDC_FORMAT_MACROS #include <inttypes.h> #include <cstdio> #include <queue> #include <list> #define MIN(a,b) ((a) < (b)) ? (a) : (b) #define MAX(a,b) ((a) > (b)) ? (a) : (b) struct Potwor { uint32_t i, d, a; }; struct Dodatni : Potwor { Dodatni(const Potwor& a) : Potwor(a) {}; }; struct Ujemny : Potwor { Ujemny(const Potwor& a) : Potwor(a) {}; }; bool operator<(Dodatni a, Dodatni b) { return a.d > b.d; } bool operator<(Ujemny a, Ujemny b) { return a.a < b.a; } using namespace std; int main(void) { uint32_t n, z; priority_queue<Dodatni> d; priority_queue<Ujemny> u; list<uint32_t> h; scanf("%" SCNu32 " %" SCNu32, &n, &z); for (int i = 0; i < n; i++) { Potwor x; x.i = i; scanf("%" SCNu32 " %" SCNu32, &x.d, &x.a); if (x.d < x.a) { Dodatni y(x); d.push(y); } else { Ujemny y(x); u.push(y); } } uint64_t s = z; while (!d.empty()) { Dodatni x = d.top(); d.pop(); if (x.d >= s) { printf("NIE\n"); return 0; } s += x.a; s -= x.d; h.push_back(x.i); // printf("d %d %d (%d)\n", x.d, x.a, x.i); } while(!u.empty()) { Ujemny y = u.top(); u.pop(); if (y.d >= s) { printf("NIE\n"); return 0; } s -= y.d; s += y.a; h.push_back(y.i); // printf("u %d %d (%d) %d %d\n", y.d, y.a, y.i, -y.d+y.a, s); } printf("TAK\n"); while (!h.empty()) { uint32_t i = h.front(); h.pop_front(); printf("%" PRIu32 "%c", i + 1, h.empty() ? '\n' : ' '); } return 0; } |