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
#include <iostream>
#include <vector>
#include <sstream>
#include <climits>
#include <algorithm>

using std::cin;
using std::cout;
using std::endl;
using std::vector;
using std::stringstream;

struct przeciwnik {
	int numer, obrazenia, nagroda, balans;
	przeciwnik(int nr, int o, int n) {
		numer = nr;
		obrazenia = o;
		nagroda = n;
		balans = nagroda - obrazenia;
	}
};

stringstream odp;

int main() {
	std::ios_base::sync_with_stdio(0);
	int ilosc_przeciwnikow,
		poziom_zycia;
	cin >> ilosc_przeciwnikow
		>> poziom_zycia;
	vector<przeciwnik> przeciwnicy;
	int t_obrazenia, t_nagroda;
	for(int nr = 1; ilosc_przeciwnikow--; ++nr) {
		cin >> t_obrazenia
			>> t_nagroda;
		przeciwnik p(nr, t_obrazenia, t_nagroda);
		przeciwnicy.push_back(p);
	}
	std::sort(przeciwnicy.begin(), przeciwnicy.end(), [](przeciwnik const& p1, przeciwnik const& p2) {
		if(p1.nagroda == p2.nagroda)
			return p1.balans > p2.balans;

		return p1.nagroda > p2.nagroda;
	});
	typedef std::vector<przeciwnik>::iterator p_it;
	for(p_it it = przeciwnicy.begin(); it != przeciwnicy.end();) {
		if(poziom_zycia - (*it).obrazenia > 0) {
			poziom_zycia += (*it).nagroda - (*it).obrazenia;
			odp << (*it).numer << " ";
			it = przeciwnicy.erase(it);
		} else {
			cout << "NIE\n";
			return 0;
		}
	}
	cout << "TAK\n" << odp.str() << "\n";
	return 0;
}