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
#include <cstdio>

int main(){
	int n, player;
	scanf("%d", &n);
	scanf("%d", &player);
	int atak[n];
	int eliksir[n];
	unsigned int index[n];
	int sila = player;
	
	for(int i = 0; i < n; i++){
		scanf("%d", &atak[i]);
		scanf("%d", &eliksir[i]);
		sila = sila - atak[i] + eliksir[i];
		index[i] = i;
	}
	
	if(sila <= 0){
		printf("%s\n", "NIE");
		return 0;
	}
	int pocz = 0;
	int koniec = n;

		int j , v, x;
		unsigned int y;
		for (int k = pocz + 1; k < koniec ; k++) { // pÄ?tla zewnÄ?trzna, k to pierwszy nieposortowany
			j = k - 1; // zaczynamy od elementu k-1
			v = eliksir[k] ; // kopiujemy wyróşniony element do zmiennej v
			x = atak[k];
			y = index[k];
			while ( j >= 0 && v < eliksir[j] ) // dopĂłki v jest mniejszy niĹź a[j]
			{ // i nie osiÄ?gniÄ?ty zostaĹ? poczÄ?tek tablicy
				eliksir[j+1] = eliksir[j]; // przesuĹ? element w prawo
				atak[j+1] = atak[j];
				index[j+1] = index[j];
				j-- ; // sprawdĹş poprzedni element
			} // niezmiennik: (j==-1) lub (v >= a[j])
			eliksir[j+1] = v ;
			atak[j+1] = x;
			index[j+1] = y;
		}
		
		int h = n;
		int m = n;
		int licznik = 0;
		int output[n];
		while(n >= 0){
			bool flaga = true;
			while(h >= 0 && flaga == true){
				if(atak[h] != -1 && atak[h] < player){
					player = player - atak[h] + eliksir[h];
					atak[h] = -1;
					eliksir[h] = -1;
					flaga = false;
					output[licznik] = index[h];
					licznik++;
				}
				h--;
			}
			n--;
		}
	
		printf("%s\n", "TAK");
		for(int i = 0; i < m; i++){
		printf("%d", output[i]+1);
		printf("%s", " ");
	}
}