#include <cstdio>
#include <algorithm>
using namespace std;
struct Monstah {
int id, dmg, hlth, diff;
Monstah() {}
Monstah(int i, int d, int a) {
id = i;
dmg = d;
hlth = a;
diff = hlth - dmg;
}
};
int sign(int x) {
if(x >= 0) return 1;
else return -1;
}
bool operator<(const Monstah &a, const Monstah &b) {
int sa = sign(a.diff), sb = sign(b.diff);
if(sa > sb)
return true;
else if(sa < sb)
return false;
if(sa > 0) {
// when diff >= 0 we prefer less dmg first
if(a.dmg <= b.dmg)
return true;
} else {
// when diff < 0 we prefer more dmg first
if(a.dmg > b.dmg && 1 + a.hlth > b.dmg)
return true;
}
return false;
}
int main() {
int n, z, d, a;
Monstah ar[100000];
int ans[100000];
scanf("%d %d", &n, &z);
for(int i = 0; i < n; ++i) {
scanf("%d %d", &d, &a);
ar[i] = Monstah(i + 1, d, a);
}
sort(ar, ar + n);
//for(int i = 0; i < n; ++i)
//printf("id=%d dmg=%d hlth=%d diff=%d\n", ar[i].id, ar[i].dmg, ar[i].hlth, ar[i].diff);
for(int i = 0; i < n; ++i) {
z-= ar[i].dmg;
if(z <= 0)
break;
z += ar[i].hlth;
ans[i] = ar[i].id;
}
if(z > 0) {
printf("TAK\n");
for(int i = 0; i < n; ++i)
printf("%d ", ar[i].id);
printf("\n");
} else
printf("NIE\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 | #include <cstdio> #include <algorithm> using namespace std; struct Monstah { int id, dmg, hlth, diff; Monstah() {} Monstah(int i, int d, int a) { id = i; dmg = d; hlth = a; diff = hlth - dmg; } }; int sign(int x) { if(x >= 0) return 1; else return -1; } bool operator<(const Monstah &a, const Monstah &b) { int sa = sign(a.diff), sb = sign(b.diff); if(sa > sb) return true; else if(sa < sb) return false; if(sa > 0) { // when diff >= 0 we prefer less dmg first if(a.dmg <= b.dmg) return true; } else { // when diff < 0 we prefer more dmg first if(a.dmg > b.dmg && 1 + a.hlth > b.dmg) return true; } return false; } int main() { int n, z, d, a; Monstah ar[100000]; int ans[100000]; scanf("%d %d", &n, &z); for(int i = 0; i < n; ++i) { scanf("%d %d", &d, &a); ar[i] = Monstah(i + 1, d, a); } sort(ar, ar + n); //for(int i = 0; i < n; ++i) //printf("id=%d dmg=%d hlth=%d diff=%d\n", ar[i].id, ar[i].dmg, ar[i].hlth, ar[i].diff); for(int i = 0; i < n; ++i) { z-= ar[i].dmg; if(z <= 0) break; z += ar[i].hlth; ans[i] = ar[i].id; } if(z > 0) { printf("TAK\n"); for(int i = 0; i < n; ++i) printf("%d ", ar[i].id); printf("\n"); } else printf("NIE\n"); return 0; } |
English