/* * main.cpp * * Created on: 14-05-2014 * Author: adasdeb */ #include <iostream> #include <set> #include <vector> class monster { private: int n; int damage; int heal; double lossesr; public: monster(int n, int damage, int heal) : n(n), damage(damage), heal(heal) { if(heal) lossesr = ((double)damage)/heal; else lossesr = 1.0e100; } bool operator<(const monster &loper) const { return lossesr < loper.lossesr; } int no(void) const { return n; } int dm(void) const { return damage; } int hl(void) const { return heal; } }; int main(void) { int monn; long long bitorh; std::cin.sync_with_stdio(false); std::cin >> monn >> bitorh; std::multiset<monster> monsters; std::vector<int> killedm; bool exists = true; unsigned int lasts = 1; for(int i = 1; i <= monn; i++) { int mond, mone; std::cin >> mond >> mone; monsters.insert(monster(i, mond, mone)); } while(!monsters.empty()) { if(killedm.size() == lasts) { std::cout << lasts; exists = false; break; } else lasts = killedm.size(); for(std::multiset<monster>::iterator it = monsters.begin(); it != monsters.end(); ++it) { if(it->dm() < bitorh) { bitorh += it->hl() - it->dm(); killedm.push_back(it->no()); monsters.erase(it); break; } } } if(exists) { std::cout << "TAK\n"; for(std::vector<int>::iterator it = killedm.begin(); it != killedm.end(); ++it) std::cout << *it << " "; } else std::cout << "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 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | /* * main.cpp * * Created on: 14-05-2014 * Author: adasdeb */ #include <iostream> #include <set> #include <vector> class monster { private: int n; int damage; int heal; double lossesr; public: monster(int n, int damage, int heal) : n(n), damage(damage), heal(heal) { if(heal) lossesr = ((double)damage)/heal; else lossesr = 1.0e100; } bool operator<(const monster &loper) const { return lossesr < loper.lossesr; } int no(void) const { return n; } int dm(void) const { return damage; } int hl(void) const { return heal; } }; int main(void) { int monn; long long bitorh; std::cin.sync_with_stdio(false); std::cin >> monn >> bitorh; std::multiset<monster> monsters; std::vector<int> killedm; bool exists = true; unsigned int lasts = 1; for(int i = 1; i <= monn; i++) { int mond, mone; std::cin >> mond >> mone; monsters.insert(monster(i, mond, mone)); } while(!monsters.empty()) { if(killedm.size() == lasts) { std::cout << lasts; exists = false; break; } else lasts = killedm.size(); for(std::multiset<monster>::iterator it = monsters.begin(); it != monsters.end(); ++it) { if(it->dm() < bitorh) { bitorh += it->hl() - it->dm(); killedm.push_back(it->no()); monsters.erase(it); break; } } } if(exists) { std::cout << "TAK\n"; for(std::vector<int>::iterator it = killedm.begin(); it != killedm.end(); ++it) std::cout << *it << " "; } else std::cout << "NIE\n"; return 0; } |