#include <stdio.h> #include <stdlib.h> #include <stdint.h> int n; uint64_t z; typedef struct { int p; int d, a; } pot_t; pot_t p[100000]; int kol[100000]; #ifdef DEBUG void dump(int step, uint64_t z) { int i; printf("--------- %d z=%llu\n", step, z); for (i = 0; i < n; i++) { if (p[i].p) { printf("[%d]: %d %d\n", i + 1, p[i].d, p[i].a); } } } #else #define dump(step, z) #endif int main(void) { int i; int zz; scanf("%d%d", &n, &zz); z = zz; for (i = 0; i < n; i++) { p[i].p = !0; scanf("%d%d", &p[i].d, &p[i].a); } for (i = 0; i < n; i++) { int j, sel_val, sel_ind; dump(i, z); sel_ind = -1; for (j = 0; j < n; j++) { if (p[j].p && p[j].d < z) { if (sel_ind < 0 || sel_val < p[j].a) { sel_ind = j; sel_val = p[j].a; } } } #ifdef DEBUG printf("sel: %d @%d\n", sel_val, sel_ind + 1); #endif if (sel_ind < 0) { break; } kol[i] = sel_ind + 1; z = z - p[sel_ind].d + p[sel_ind].a; p[sel_ind].p = 0; } puts(i == n ? "TAK" : "NIE"); #ifndef DEBUG if (i == n) #endif { int j; for (j = 0; j < i; j++) { if (j) { putchar(' '); } printf("%d", kol[j]); } putchar('\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 | #include <stdio.h> #include <stdlib.h> #include <stdint.h> int n; uint64_t z; typedef struct { int p; int d, a; } pot_t; pot_t p[100000]; int kol[100000]; #ifdef DEBUG void dump(int step, uint64_t z) { int i; printf("--------- %d z=%llu\n", step, z); for (i = 0; i < n; i++) { if (p[i].p) { printf("[%d]: %d %d\n", i + 1, p[i].d, p[i].a); } } } #else #define dump(step, z) #endif int main(void) { int i; int zz; scanf("%d%d", &n, &zz); z = zz; for (i = 0; i < n; i++) { p[i].p = !0; scanf("%d%d", &p[i].d, &p[i].a); } for (i = 0; i < n; i++) { int j, sel_val, sel_ind; dump(i, z); sel_ind = -1; for (j = 0; j < n; j++) { if (p[j].p && p[j].d < z) { if (sel_ind < 0 || sel_val < p[j].a) { sel_ind = j; sel_val = p[j].a; } } } #ifdef DEBUG printf("sel: %d @%d\n", sel_val, sel_ind + 1); #endif if (sel_ind < 0) { break; } kol[i] = sel_ind + 1; z = z - p[sel_ind].d + p[sel_ind].a; p[sel_ind].p = 0; } puts(i == n ? "TAK" : "NIE"); #ifndef DEBUG if (i == n) #endif { int j; for (j = 0; j < i; j++) { if (j) { putchar(' '); } printf("%d", kol[j]); } putchar('\n'); } return 0; } |