#include <iostream> #include <list> int i,n,z; int kolejnosc[100000]; using namespace std; struct TSmok { int d;//obrazenia int a;//punkty zdrowia int ktory; }; bool porownaj(const TSmok& smok1,const TSmok& smok2) { int c1=smok1.a-smok1.d, c2=smok2.a-smok2.d;; if(c1 == c2) {if(smok1.d > smok2.d) return true; else return false;} if ((c1>=0)&&(c1>c2)) return true; if ((c1>=0)&&(c1 < c2)) return false; if ((c1<0)&&(c2>=0)) return false; if ((c1<0)&&(c2<0)) {if(smok1.d > smok2.d) return true; else return false;} }; int main (void) { ios_base::sync_with_stdio(0); //zdecydowanie skraca operacje wejscia wyjscia-wylaczenie synchronizacji strumienia int pokonanych=0; int j=1; list <TSmok> lista; cin>>n>>z; //n-smokow,z-poczatkowe zycie int zycie=z; for (i=1;i<=n;i++) {TSmok smok; cin>>smok.d>>smok.a; smok.ktory=i; lista.push_back(smok); } lista.sort(porownaj); // drukowanie listy list <TSmok>::iterator start = lista.begin(), stop = lista.end(); /* while (start != stop) { cout << start->d<<start->a; cout << endl; start++; } start=lista.begin(); */ while (start!=stop) { if ((zycie-start->d)>0) {zycie=zycie-start->d+start->a; //cout<<"punktow zycia "<<zycie<<" smok nr: "<<start->ktory<<'\n'; kolejnosc[j++]=start->ktory; pokonanych++; lista.erase(start); start=lista.begin(); } else start++; } if (pokonanych==n) {cout<<"TAK\n"; for (i=1;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 | #include <iostream> #include <list> int i,n,z; int kolejnosc[100000]; using namespace std; struct TSmok { int d;//obrazenia int a;//punkty zdrowia int ktory; }; bool porownaj(const TSmok& smok1,const TSmok& smok2) { int c1=smok1.a-smok1.d, c2=smok2.a-smok2.d;; if(c1 == c2) {if(smok1.d > smok2.d) return true; else return false;} if ((c1>=0)&&(c1>c2)) return true; if ((c1>=0)&&(c1 < c2)) return false; if ((c1<0)&&(c2>=0)) return false; if ((c1<0)&&(c2<0)) {if(smok1.d > smok2.d) return true; else return false;} }; int main (void) { ios_base::sync_with_stdio(0); //zdecydowanie skraca operacje wejscia wyjscia-wylaczenie synchronizacji strumienia int pokonanych=0; int j=1; list <TSmok> lista; cin>>n>>z; //n-smokow,z-poczatkowe zycie int zycie=z; for (i=1;i<=n;i++) {TSmok smok; cin>>smok.d>>smok.a; smok.ktory=i; lista.push_back(smok); } lista.sort(porownaj); // drukowanie listy list <TSmok>::iterator start = lista.begin(), stop = lista.end(); /* while (start != stop) { cout << start->d<<start->a; cout << endl; start++; } start=lista.begin(); */ while (start!=stop) { if ((zycie-start->d)>0) {zycie=zycie-start->d+start->a; //cout<<"punktow zycia "<<zycie<<" smok nr: "<<start->ktory<<'\n'; kolejnosc[j++]=start->ktory; pokonanych++; lista.erase(start); start=lista.begin(); } else start++; } if (pokonanych==n) {cout<<"TAK\n"; for (i=1;i<=n;i++) cout<<kolejnosc[i]<<' '; } else cout<<"NIE"; return 0; } |