Niestety, nie byliśmy w stanie w pełni poprawnie wyświetlić tego pliku, ponieważ nie jest zakodowany w UTF-8. Możesz pobrać ten plik i spróbować otworzyć go samodzielnie.
  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
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/*----------------------
Koniecko �ukasz - lukon
lukon10@wp.pl
----------------------*/
/*---------------------------------------- 
Potyczki Algorytmiczne 2014, runda 2
Zadanie: BOH
Bohater [B]
-----------------------------------------*/

#include <iostream>
#include <list>

using namespace std;

typedef struct potwor{
	int i; //numer potwora
	int d; //punkty �ycia obra�enia
	int a; //punkty �ycia eliksir
	int ad; //bilans eliksir-obra�enia
} Potwor;

bool sort_ad(const Potwor& p1,const Potwor& p2){
	return p1.ad > p2.ad;
}

bool sort_d(const Potwor& p1,const Potwor& p2){
	if(p1.d == p2.d){
		return p1.a > p2.a;
	}
	else return p1.d > p2.d;
}


int main(){
	int n,z; 
	cin >> n; //liczba potwor�w
	cin >> z; //punkty �ycia gracza
	
	list<Potwor> dane; //dane do zadania
	list<int> walki; //kolejnosc toczenia walk
	
	/* Wczytanie danych */
	for(int i=1; i <= n; i++){
		Potwor p;
		p.i = i;
		cin >> p.d;
		cin >> p.a;
		p.ad = p.a - p.d;
		dane.push_back(p);
	}	
	
	/* Sortowanie po bilansie elixir-obra�enia (a-d) */
	dane.sort(sort_ad);
	
	/* Walka z potworami o bilansie dodatnim lub zerowym */
	for(list<Potwor>::iterator iter=dane.begin(); iter != dane.end(); ){
		Potwor p = *iter;
	 	if(p.ad >= 0){
	 		if(p.d >= z){ //punkty obra�e� >= puknkty zdrowia
	 			iter++; //pomin��, bo gracz nie da rady pokona� potwora, walka w kolejnym etapie
	 		}
	 		else{
	 			walki.push_back(p.i);
	 			z += p.ad;
	 			iter = dane.erase(iter);
			}
	 	}
	 	else if(p.ad < 0)
	 		break;		
	}
	
	/* Dogrywka z potworami o bilansie dodatnim lub zerowym */
	int test=0;
	for(list<Potwor>::iterator iter=dane.begin(); iter != dane.end(); ){
		Potwor p = *iter;
		if(p.ad >= 0){
	 		if(p.d >= z){ //punkty obra�e� >= puknkty zdrowia
	 			test = 1;
	 			break; //KONIEC -> NIE
	 		}
	 		else{
	 			walki.push_back(p.i);
	 			z += p.ad;
	 			iter = dane.erase(iter);
			}
	 	}
	 	else if(p.ad < 0)
	 		break; //kolejny etap
	}
	if(test) {
		cout << "NIE" << endl;
		return 0;
	}
		
	/* Sortowanie po ilosci zadawanych obra�e� */ 
	dane.sort(sort_d);
		
	/* Walka z potworami o bilansie ujemnym */
	test = 0;
	for(list<Potwor>::iterator iter=dane.begin(); iter != dane.end(); iter++){
		Potwor p = *iter;
		if(p.d >= z){ //punkty obra�e� >= puknkty zdrowia
			test = 1; //KONIEC -> NIE
			break;
		}
		else{
			walki.push_back(p.i);
	 		z += p.ad;	 		
		}
	}
	
	if(test) {
		cout << "NIE" << endl;
		return 0;
	}
	
	/* Wynik walki pozytywny */
	cout << "TAK" << endl;
	for(list<int>::iterator iter=walki.begin(); iter != walki.end(); iter++){
		cout << *iter << " ";
	}
}