#include<cstdio>
#include<algorithm>
enum {
MAX = 100010
};
int dmg[MAX];
int heal[MAX];
int tab1[MAX];
int tab2[MAX];
int neg = 0;
bool comp1(int a, int b)
{
if(dmg[a] == dmg[b])
return heal[a] > heal[b];
return dmg[a] < dmg[b];
}
bool comp2(int a, int b)
{
if(heal[a] == heal[b])
return dmg[a] < dmg[b];
return heal[a] > heal[b];
}
int main()
{
int n, _z; scanf("%d%d", &n, &_z);
long long z = _z;
for(int i = 0; i < n; i++)
{
scanf("%d%d", dmg+i, heal+i);
if(heal[i] >= dmg[i])
tab1[i-neg] = i;
else
tab2[neg++] = i;
}
std::sort(tab1, tab1+n-neg, comp1);
std::sort(tab2, tab2+neg, comp2);
bool res = 1;
for(int i = 0; i < n-neg && res; i++)
{
z -= dmg[tab1[i]];
if(z <= 0) {res = 0; break; }
z += heal[tab1[i]];
}
for(int i = 0; i < neg && res; i++)
{
z -= dmg[tab2[i]];
if(z <= 0) {res = 0; break; }
z += heal[tab2[i]];
}
if(res)
{
printf("TAK\n");
for(int i = 0; i < n-neg; i++)
printf("%d ", tab1[i]+1);
for(int i = 0; i < neg; i++)
printf("%d ", tab2[i]+1);
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 | #include<cstdio> #include<algorithm> enum { MAX = 100010 }; int dmg[MAX]; int heal[MAX]; int tab1[MAX]; int tab2[MAX]; int neg = 0; bool comp1(int a, int b) { if(dmg[a] == dmg[b]) return heal[a] > heal[b]; return dmg[a] < dmg[b]; } bool comp2(int a, int b) { if(heal[a] == heal[b]) return dmg[a] < dmg[b]; return heal[a] > heal[b]; } int main() { int n, _z; scanf("%d%d", &n, &_z); long long z = _z; for(int i = 0; i < n; i++) { scanf("%d%d", dmg+i, heal+i); if(heal[i] >= dmg[i]) tab1[i-neg] = i; else tab2[neg++] = i; } std::sort(tab1, tab1+n-neg, comp1); std::sort(tab2, tab2+neg, comp2); bool res = 1; for(int i = 0; i < n-neg && res; i++) { z -= dmg[tab1[i]]; if(z <= 0) {res = 0; break; } z += heal[tab1[i]]; } for(int i = 0; i < neg && res; i++) { z -= dmg[tab2[i]]; if(z <= 0) {res = 0; break; } z += heal[tab2[i]]; } if(res) { printf("TAK\n"); for(int i = 0; i < n-neg; i++) printf("%d ", tab1[i]+1); for(int i = 0; i < neg; i++) printf("%d ", tab2[i]+1); printf("\n"); } else printf("NIE\n"); return 0; } |
English