#include<algorithm> #include<cstdio> using namespace std; const int N = 100000; struct monster { int id; int d; int a; } monsters[N]; bool operator<(monster const & m1, monster const & m2){ if(m1.d <= m1.a && m2.d <= m2.a) return m1.d < m2.d; if(m1.d > m1.a && m2.d > m2.a) return m1.a > m2.a; return m1.d <= m1.a; } int main(){ int n, z; scanf("%d%d", &n, &z); for(int i = 0; i < n; i++){ scanf("%d%d", &monsters[i].d, &monsters[i].a); monsters[i].id = i + 1; } sort(monsters, monsters + n); for(int i = 0; i < n; i++){ z -= monsters[i].d; if(z <= 0){ printf("NIE\n"); return 0; } z += monsters[i].a; } printf("TAK\n"); for(int i = 0; i < n; i++) printf("%d ", monsters[i].id); 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 | #include<algorithm> #include<cstdio> using namespace std; const int N = 100000; struct monster { int id; int d; int a; } monsters[N]; bool operator<(monster const & m1, monster const & m2){ if(m1.d <= m1.a && m2.d <= m2.a) return m1.d < m2.d; if(m1.d > m1.a && m2.d > m2.a) return m1.a > m2.a; return m1.d <= m1.a; } int main(){ int n, z; scanf("%d%d", &n, &z); for(int i = 0; i < n; i++){ scanf("%d%d", &monsters[i].d, &monsters[i].a); monsters[i].id = i + 1; } sort(monsters, monsters + n); for(int i = 0; i < n; i++){ z -= monsters[i].d; if(z <= 0){ printf("NIE\n"); return 0; } z += monsters[i].a; } printf("TAK\n"); for(int i = 0; i < n; i++) printf("%d ", monsters[i].id); printf("\n"); return 0; } |