#include <iostream> #include <vector> #include <algorithm> //Potyczki Algorytmiczne 2014 //Zadanie: Bohater (BOH/B/2) //Autor rozwiązania: Cwynar Damian using namespace std; class potwor{ public: int eliksir, atak, zysk, lp; bool zywy; bool operator < (const potwor& str) const{ if (zysk<=0 || str.zysk<=0){ return (eliksir > str.eliksir); } return (zysk > str.zysk); } }; bool porownaj_potwory(potwor a, potwor b){ return a.zysk<b.zysk; } int main() { ios_base::sync_with_stdio(0); //wyłączenie synchrnizacji przyśpiesza strumienie int n; //liczba wrogów int zycie; //zycie bohatera cin >> n >> zycie; //tworzy tablicę potworów vector<potwor> potworki; vector<int> kolejnosc; potworki.resize(n); kolejnosc.resize(n); //wczyruje dane for(int i=0; i<n; i++){ cin >> potworki[i].atak; cin >> potworki[i].eliksir; potworki[i].zysk=potworki[i].eliksir - potworki[i].atak; potworki[i].lp=i+1; potworki[i].zywy=true; } sort(potworki.begin(), potworki.end()); int lp=0; for(int i=0; i<n;){ if (zycie<=potworki[i].atak || !(potworki[i].zywy)) { i++; continue; } else if (zycie>potworki[i].atak){ zycie-=potworki[i].atak; zycie+=potworki[i].eliksir; potworki[i].zywy=false; kolejnosc[lp]=potworki[i].lp; lp++; i=0; /* cout << "Zabiłem lp: " << potworki[i].lp << endl; cout << "HP teraz: " << zycie << endl; */ }} bool wynik=true; for (int i=0; i<n; i++){ if (potworki[i].zywy) wynik=false; } if (wynik){ cout << "TAK\n"; for (int i=0; i<n; i++){ cout << kolejnosc[i] << " "; } } else { cout << "NIE"; } return 0; }
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 | #include <iostream> #include <vector> #include <algorithm> //Potyczki Algorytmiczne 2014 //Zadanie: Bohater (BOH/B/2) //Autor rozwiązania: Cwynar Damian using namespace std; class potwor{ public: int eliksir, atak, zysk, lp; bool zywy; bool operator < (const potwor& str) const{ if (zysk<=0 || str.zysk<=0){ return (eliksir > str.eliksir); } return (zysk > str.zysk); } }; bool porownaj_potwory(potwor a, potwor b){ return a.zysk<b.zysk; } int main() { ios_base::sync_with_stdio(0); //wyłączenie synchrnizacji przyśpiesza strumienie int n; //liczba wrogów int zycie; //zycie bohatera cin >> n >> zycie; //tworzy tablicę potworów vector<potwor> potworki; vector<int> kolejnosc; potworki.resize(n); kolejnosc.resize(n); //wczyruje dane for(int i=0; i<n; i++){ cin >> potworki[i].atak; cin >> potworki[i].eliksir; potworki[i].zysk=potworki[i].eliksir - potworki[i].atak; potworki[i].lp=i+1; potworki[i].zywy=true; } sort(potworki.begin(), potworki.end()); int lp=0; for(int i=0; i<n;){ if (zycie<=potworki[i].atak || !(potworki[i].zywy)) { i++; continue; } else if (zycie>potworki[i].atak){ zycie-=potworki[i].atak; zycie+=potworki[i].eliksir; potworki[i].zywy=false; kolejnosc[lp]=potworki[i].lp; lp++; i=0; /* cout << "Zabiłem lp: " << potworki[i].lp << endl; cout << "HP teraz: " << zycie << endl; */ }} bool wynik=true; for (int i=0; i<n; i++){ if (potworki[i].zywy) wynik=false; } if (wynik){ cout << "TAK\n"; for (int i=0; i<n; i++){ cout << kolejnosc[i] << " "; } } else { cout << "NIE"; } return 0; } |