/************************************************************************* * * * Potyczki Algorytmiczne 2014 * * * * Zadanie: Bohater [B] * * Autor: Jakub Sroka * * * *************************************************************************/ #include <cstdio> #include <vector> #include <algorithm> using namespace std; class monster { public: int dmg; int potion; int nr; }; bool sortDMG(monster a, monster b) { return a.dmg < b.dmg; } bool sortPOT(monster a, monster b) { return a.potion > b.potion; } int main(int argc, const char * argv[]) { int n, hp; scanf("%d %d", &n, &hp); vector<monster> monsters(n); vector<monster> nonNegativeMonsters; vector<monster> negativeMonsters; vector<monster> negativeMonstersDMG; vector<int> result; vector<bool> isDead(n+1); for (int i=0; i<n; i++) { monsters[i].nr = i+1; scanf("%d %d", &monsters[i].dmg, &monsters[i].potion); } for (int i=0; i<n; i++) { if (monsters[i].potion-monsters[i].dmg >= 0) { nonNegativeMonsters.push_back(monsters[i]); } else negativeMonsters.push_back(monsters[i]); } sort(nonNegativeMonsters.begin(), nonNegativeMonsters.end(), sortDMG); for (int i=0; i<nonNegativeMonsters.size(); i++) { hp -= nonNegativeMonsters[i].dmg; if (hp <= 0) { printf("NIE"); return 0; } hp += nonNegativeMonsters[i].potion; result.push_back(nonNegativeMonsters[i].nr); } sort(negativeMonsters.begin(), negativeMonsters.end(), sortPOT); int x = negativeMonsters.size(); for (int i=0; i<x; i++) { result.push_back(negativeMonsters[i].nr); hp -= negativeMonsters[i].dmg; if (hp <= 0) { printf("NIE"); return 0; } hp += negativeMonsters[i].potion; } printf("TAK\n"); for (int i=0; i<n; i++) { printf("%d ", result[i]); } 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 | /************************************************************************* * * * Potyczki Algorytmiczne 2014 * * * * Zadanie: Bohater [B] * * Autor: Jakub Sroka * * * *************************************************************************/ #include <cstdio> #include <vector> #include <algorithm> using namespace std; class monster { public: int dmg; int potion; int nr; }; bool sortDMG(monster a, monster b) { return a.dmg < b.dmg; } bool sortPOT(monster a, monster b) { return a.potion > b.potion; } int main(int argc, const char * argv[]) { int n, hp; scanf("%d %d", &n, &hp); vector<monster> monsters(n); vector<monster> nonNegativeMonsters; vector<monster> negativeMonsters; vector<monster> negativeMonstersDMG; vector<int> result; vector<bool> isDead(n+1); for (int i=0; i<n; i++) { monsters[i].nr = i+1; scanf("%d %d", &monsters[i].dmg, &monsters[i].potion); } for (int i=0; i<n; i++) { if (monsters[i].potion-monsters[i].dmg >= 0) { nonNegativeMonsters.push_back(monsters[i]); } else negativeMonsters.push_back(monsters[i]); } sort(nonNegativeMonsters.begin(), nonNegativeMonsters.end(), sortDMG); for (int i=0; i<nonNegativeMonsters.size(); i++) { hp -= nonNegativeMonsters[i].dmg; if (hp <= 0) { printf("NIE"); return 0; } hp += nonNegativeMonsters[i].potion; result.push_back(nonNegativeMonsters[i].nr); } sort(negativeMonsters.begin(), negativeMonsters.end(), sortPOT); int x = negativeMonsters.size(); for (int i=0; i<x; i++) { result.push_back(negativeMonsters[i].nr); hp -= negativeMonsters[i].dmg; if (hp <= 0) { printf("NIE"); return 0; } hp += negativeMonsters[i].potion; } printf("TAK\n"); for (int i=0; i<n; i++) { printf("%d ", result[i]); } return 0; } |