#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; } |
English