#include <stdio.h>
int main(void) {
unsigned int mCount, i, killed = 0;
long long int health;
scanf("%u", &mCount);
scanf("%llu", &health);
unsigned int monsters[mCount][3], kills[mCount];
for (i=0; i<mCount;i++)
{
scanf("%u %u", &monsters[i][0], &monsters[i][1]);
monsters[i][2] = 0;
}
int canContinue = 1, monster_pos = -1;
while(canContinue) // kill the rest of mosters starting with most hardest
{
monster_pos = -1;
for (i=0; i<mCount;i++) // kill all bots which will increase heroe's health (or 0 health increased);
{
int h = monsters[i][1] - monsters[i][0];
if( monsters[i][2]==0 && h>=0 && (health - monsters[i][0]) > 0)
{
kills[killed] = i + 1;
monsters[i][2] = 1;
health += h;
killed += 1;
monster_pos = i;
}
}
if(monster_pos == -1) //if not killable monsters found then stop loop
canContinue = 0;
}
canContinue = 1;
while(canContinue) // kill the rest of mosters starting with most hardest
{
monster_pos = -1;
for (i=0; i<mCount;i++) // find hardest bot to kill
{
if(monsters[i][2]==0){ // if not killed yet i then do more checks
if(monster_pos == -1) //if first then assign in order to farther comparings
monster_pos = i;
else
if(monsters[i][0]>monsters[monster_pos][0])
monster_pos = i;
}
}
if(monster_pos == -1) //if not killable monsters found then stop loop
canContinue = 0;
else
{
health -= monsters[monster_pos][0];
if(health < 1) //if lower than 1 then heroe died{
canContinue = 0;
else
{
health += monsters[monster_pos][1];
kills[killed] = monster_pos + 1;
monsters[monster_pos][2] = 1; //mark as killed
killed += 1; //advance to next position
}
}
}
if(killed == mCount)
{
printf("TAK\n");
for (i=0; i<mCount;i++)
printf("%d ", kills[i]);
}
else
printf("NIE");
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 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | #include <stdio.h> int main(void) { unsigned int mCount, i, killed = 0; long long int health; scanf("%u", &mCount); scanf("%llu", &health); unsigned int monsters[mCount][3], kills[mCount]; for (i=0; i<mCount;i++) { scanf("%u %u", &monsters[i][0], &monsters[i][1]); monsters[i][2] = 0; } int canContinue = 1, monster_pos = -1; while(canContinue) // kill the rest of mosters starting with most hardest { monster_pos = -1; for (i=0; i<mCount;i++) // kill all bots which will increase heroe's health (or 0 health increased); { int h = monsters[i][1] - monsters[i][0]; if( monsters[i][2]==0 && h>=0 && (health - monsters[i][0]) > 0) { kills[killed] = i + 1; monsters[i][2] = 1; health += h; killed += 1; monster_pos = i; } } if(monster_pos == -1) //if not killable monsters found then stop loop canContinue = 0; } canContinue = 1; while(canContinue) // kill the rest of mosters starting with most hardest { monster_pos = -1; for (i=0; i<mCount;i++) // find hardest bot to kill { if(monsters[i][2]==0){ // if not killed yet i then do more checks if(monster_pos == -1) //if first then assign in order to farther comparings monster_pos = i; else if(monsters[i][0]>monsters[monster_pos][0]) monster_pos = i; } } if(monster_pos == -1) //if not killable monsters found then stop loop canContinue = 0; else { health -= monsters[monster_pos][0]; if(health < 1) //if lower than 1 then heroe died{ canContinue = 0; else { health += monsters[monster_pos][1]; kills[killed] = monster_pos + 1; monsters[monster_pos][2] = 1; //mark as killed killed += 1; //advance to next position } } } if(killed == mCount) { printf("TAK\n"); for (i=0; i<mCount;i++) printf("%d ", kills[i]); } else printf("NIE"); return 0; } |
English