#include <iostream> #include <vector> #include <algorithm> using namespace std; struct mob{ int damage, pot,id; int difference() { return pot - damage; } }; int main() { vector<mob> posm, negm; int n; long long hp, endsum; cin >> n >> hp; endsum = hp; for (int i = 0; i < n; i++) { mob tmp; cin >> tmp.damage >> tmp.pot; endsum += tmp.difference(); tmp.id = i + 1; if (tmp.difference() < 0) negm.push_back(tmp); else posm.push_back(tmp); } if (endsum <= 0) { #ifdef _DEBUG cerr << "endsum:" << endsum << endl; #endif cout << "NIE" << endl; return 0; } sort(posm.begin(), posm.end(), [](mob a, mob b){return a.damage < b.damage; }); sort(negm.begin(), negm.end(), [](mob a, mob b){return a.pot > b.pot; }); #ifdef _DEBUG cerr << "posm" << endl; #endif for (auto i : posm) { #ifdef _DEBUG cerr << "hp:" << hp << "\t"<<i.id << " mob's stats {d:" << i.damage << "; p:" <<i.pot<<"}" << endl; #endif if (hp <= i.damage) { cout << "NIE" << endl; return 0; } hp += i.difference(); } #ifdef _DEBUG cerr << "negm" << endl; #endif for (auto i : negm) { #ifdef _DEBUG cerr << "hp:" << hp << "\t" << i.id << " mob's stats {d:" << i.damage << "; p:" << i.pot << "}" << endl; #endif if (hp <= i.damage) { cout << "NIE" << endl; return 0; } hp += i.difference(); } cout << "TAK" << endl; for (auto i : posm) cout << i.id << " "; for (auto i : negm) cout << i.id << " "; cout << endl; 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 | #include <iostream> #include <vector> #include <algorithm> using namespace std; struct mob{ int damage, pot,id; int difference() { return pot - damage; } }; int main() { vector<mob> posm, negm; int n; long long hp, endsum; cin >> n >> hp; endsum = hp; for (int i = 0; i < n; i++) { mob tmp; cin >> tmp.damage >> tmp.pot; endsum += tmp.difference(); tmp.id = i + 1; if (tmp.difference() < 0) negm.push_back(tmp); else posm.push_back(tmp); } if (endsum <= 0) { #ifdef _DEBUG cerr << "endsum:" << endsum << endl; #endif cout << "NIE" << endl; return 0; } sort(posm.begin(), posm.end(), [](mob a, mob b){return a.damage < b.damage; }); sort(negm.begin(), negm.end(), [](mob a, mob b){return a.pot > b.pot; }); #ifdef _DEBUG cerr << "posm" << endl; #endif for (auto i : posm) { #ifdef _DEBUG cerr << "hp:" << hp << "\t"<<i.id << " mob's stats {d:" << i.damage << "; p:" <<i.pot<<"}" << endl; #endif if (hp <= i.damage) { cout << "NIE" << endl; return 0; } hp += i.difference(); } #ifdef _DEBUG cerr << "negm" << endl; #endif for (auto i : negm) { #ifdef _DEBUG cerr << "hp:" << hp << "\t" << i.id << " mob's stats {d:" << i.damage << "; p:" << i.pot << "}" << endl; #endif if (hp <= i.damage) { cout << "NIE" << endl; return 0; } hp += i.difference(); } cout << "TAK" << endl; for (auto i : posm) cout << i.id << " "; for (auto i : negm) cout << i.id << " "; cout << endl; return 0; } |