#include <cstdio> #include <algorithm> struct potwor { int d,a,nr; }; inline bool operator<(const potwor &a, const potwor &b) { int da=a.a-a.d,db=b.a-b.d; if ((da >= 0) != (db >= 0)) return (da >= 0) > (db >= 0); if (da >= 0) return a.d < b.d; // da < 0 <=> db < 0 if (a.d == b.d) return a.a > b.a; return a.d > b.d; } int main() { int n; long long z; scanf("%d %lld", &n, &z); potwor tab[n]; for (int i=0 ;i<n; ++i) { scanf("%d %d", &tab[i].d, &tab[i].a); tab[i].nr = i + 1; } std::sort(tab, tab+n); for (int i=0; i<n && z>=0; ++i) { // fprintf(stderr, "%d %d\n", tab[i].d, tab[i].a); z -= tab[i].d; if (0 < z) z += tab[i].a; } if (z <=0) printf("NIE\n"); else { printf("TAK\n"); for (int i=0; i<n; ++i) printf("%d ", tab[i].nr); printf("\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 | #include <cstdio> #include <algorithm> struct potwor { int d,a,nr; }; inline bool operator<(const potwor &a, const potwor &b) { int da=a.a-a.d,db=b.a-b.d; if ((da >= 0) != (db >= 0)) return (da >= 0) > (db >= 0); if (da >= 0) return a.d < b.d; // da < 0 <=> db < 0 if (a.d == b.d) return a.a > b.a; return a.d > b.d; } int main() { int n; long long z; scanf("%d %lld", &n, &z); potwor tab[n]; for (int i=0 ;i<n; ++i) { scanf("%d %d", &tab[i].d, &tab[i].a); tab[i].nr = i + 1; } std::sort(tab, tab+n); for (int i=0; i<n && z>=0; ++i) { // fprintf(stderr, "%d %d\n", tab[i].d, tab[i].a); z -= tab[i].d; if (0 < z) z += tab[i].a; } if (z <=0) printf("NIE\n"); else { printf("TAK\n"); for (int i=0; i<n; ++i) printf("%d ", tab[i].nr); printf("\n"); } return 0; } |