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