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