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