#include <cstdio>
#include <list>
struct challenge{
int index;
int damage;
int lifePoints;
int diff;
};
bool compare_challenge(const challenge& a, const challenge& b) {
if (a.diff >= 0 && b.diff >= 0) return (a.damage < b.damage);
else if (a.diff >= 0 && b.diff < 0) return true;
else if (a.diff < 0 && b.diff >= 0) return false;
else return (a.lifePoints > b.lifePoints);
}
int main(int argc, char* argv[]) {
// read first line
int numberOfMonsters = 0;
int hitPoints = 0;
int initHitPoints = 0;
scanf("%d %d", &numberOfMonsters, &initHitPoints);
hitPoints = initHitPoints;
// read input values and calculate
// if hero can beat all monsters
int damage = 0;
int lifePoints = 0;
int diff = 0;
std::list<challenge> challenges;
numberOfMonsters++;
for (int i = 1; i < numberOfMonsters; ++i) {
scanf("%d %d", &damage, &lifePoints);
diff = lifePoints - damage;
challenges.push_back({i, damage, lifePoints, diff});
hitPoints += diff;
}
if (hitPoints > 0) {
challenges.sort(compare_challenge);
// check if hero can kill first monster
if (initHitPoints > challenges.begin()->damage) {
printf("TAK\n");
for (std::list<challenge>::iterator it = challenges.begin(); it != challenges.end(); ++it) {
printf("%d ", *it);
}
} else {
printf("NIE");
}
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 | #include <cstdio> #include <list> struct challenge{ int index; int damage; int lifePoints; int diff; }; bool compare_challenge(const challenge& a, const challenge& b) { if (a.diff >= 0 && b.diff >= 0) return (a.damage < b.damage); else if (a.diff >= 0 && b.diff < 0) return true; else if (a.diff < 0 && b.diff >= 0) return false; else return (a.lifePoints > b.lifePoints); } int main(int argc, char* argv[]) { // read first line int numberOfMonsters = 0; int hitPoints = 0; int initHitPoints = 0; scanf("%d %d", &numberOfMonsters, &initHitPoints); hitPoints = initHitPoints; // read input values and calculate // if hero can beat all monsters int damage = 0; int lifePoints = 0; int diff = 0; std::list<challenge> challenges; numberOfMonsters++; for (int i = 1; i < numberOfMonsters; ++i) { scanf("%d %d", &damage, &lifePoints); diff = lifePoints - damage; challenges.push_back({i, damage, lifePoints, diff}); hitPoints += diff; } if (hitPoints > 0) { challenges.sort(compare_challenge); // check if hero can kill first monster if (initHitPoints > challenges.begin()->damage) { printf("TAK\n"); for (std::list<challenge>::iterator it = challenges.begin(); it != challenges.end(); ++it) { printf("%d ", *it); } } else { printf("NIE"); } printf("\n"); } else { printf("NIE\n"); } return 0; } |
English