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
#include <iostream>
#include <sstream>
#include <string>
int main()
{
	std::string temp;
	std::getline(std::cin, temp);//Pierwsza to liczba potworów druga to startowe pkt zycia
	std::istringstream line(temp);
	int poczatek[2];
	for( int v = 0; v < 2; v++ ) 
	{
		line >> poczatek[v];
	}
	long n, z;
	n = poczatek[0];
	z = poczatek[1];
	long double**table = new long double*[n];//Nie małe tworzenie tablicy
	for( int i = 0; i < n; i++ )
	{
		table[i] = new long double[2];
	}
	for( long y = 0; y < n; y++ )
	{
		std::string temp;
		std::getline(std::cin, temp);//Pierwsza to liczba obrazenia, druga eliksir
		std::istringstream line(temp);
		line >> table[y][0] >> table[y][1];
	}//Dotąd powinno działać, teraz czas na algorytm sprawdzania
	//Wyszukaj najlepszy stosunek obrazen do eliksiru, gdzie obrazenia < obecne zycie
	long double a = 0;
	long b = 0;
	std::string wyjscie;//Trzeba zapisywać kolejność potworów gdzieś
	for( long s = 0; s < n; s++ )//Odliczanie egzekucji (tyle razy trzeba się bić co wpisów jest)
	{
		for( long y = 0; y < n; y++ )//Przeglądam wszystkie wpisy w poszukiwaniu najlepszego stosunku
		{
			//Tutaj trzeba zrobić wyszukiwarke tego co chce
			if ( table[y][0] == 0 && table[y][1] != 0 )
			{
				z += table[y][1];
				table[y][1] = 0;
				s++;
				temp = std::to_string(static_cast<long long>(y+1));//LoL long long tak, ale long to juz nie
				wyjscie = wyjscie + temp + " ";
			}
			if ( table[y][0] < z && table[y][1]/table[y][0] > a && table[y][0] != 0 )
			{
				a = table[y][1]/table[y][0];
				b = y;//Informuje o ID najlepszej opcji
			}
		}//Powinienem mieć najlepszą możliwą opcję wybraną. Czas na egzekucję. 
		if( a == 0 )
		{
			z = -1;
			break;
		}
		else
		{
			z -= table[b][0];//Zabieramy hp z potworka
			//Bo on w ogole w zadnego if'a teraz nie wejdzie, wiec nic sie nie zmieni, wiec chujoza.
			z += table[b][1];//Dostajemy hp z potionka
			table[b][0] = 0;//"Zerowanie", że zużyte
			table[b][1] = 0;
			a = 0;
			//Zapis do string'a
			temp = std::to_string(static_cast<long long>(b+1));//LoL long long tak, ale long to juz nie
			wyjscie = wyjscie + temp + " ";
		}
	}
	if( z > 1 )
	{
		std::cout << "TAK\n";
		std::cout << wyjscie;
	}
	else
	{
		std::cout << "NIE\n";
	}
	std::cin.get();
	//Free memory:
	for( int i = 0; i < n; i++ )
	{
		delete []table[i];//deletes 'n' embedded arrays
	}
	delete []table;//deletes outer array 
}