#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; } |
English