#include<algorithm> //#include<stdio.h> #include<iostream> #include<list> #include<map> #include<queue> #define FOR(i,n) for(int i = 0;i<n;++i) #define FORI(i,b,n) for(int i = b;i<n;++i) #define FORD(i,n) for(int i = n;i>=0;--i) #define ZERO 0.000001 #define MAX ((1<<31)-1) #define qprintf debug && printf #define min(a,b) ((a)<(b)?(a):(b)) #define max(a,b) ((a)>(b)?(a):(b)) #define ull long long int using namespace std; int debug=0; #define dcout debug && cout class F { public: int n; int d; int h; }; ostream& operator<<(ostream& os, const F r) { os<<"["<<r.n<<","<<r.d<<","<<r.h<<"]"; return os; } struct C { bool operator()(F a, F b){ return a.d<b.d; } }; struct RC { bool operator()(F a, F b){ return a.h>b.h; } }; int main(){ ios_base::sync_with_stdio(0); int n; long long int life; cin>>n>>life; int iwin=0,iloose=0,idraw=0; F*win=new F[n]; F*loose=new F[n]; F*draw=new F[n]; FOR(i,n){ int d,h; cin>>d>>h; F*s = d<h? (win+(iwin++)) : (d>h? (loose+(iloose++)) : (draw+(idraw++))); s->n=i+1; s->d=d; s->h=h; dcout<<*s<<endl; } C c; RC rc; sort(win,win+iwin,c); sort(draw,draw+idraw,c); sort(loose,loose+iloose,rc); dcout<<"WINS:"<<endl; FOR(i,iwin){ dcout<<win[i]<<endl; if(life<=win[i].d){ cout<<"NIE"<<endl; return 0; } life+=-win[i].d+win[i].h; } dcout<<"DRAWS:"<<endl; FOR(i,idraw){ dcout<<draw[i]<<endl; if(life<=draw[i].d){ cout<<"NIE"<<endl; return 0; } } dcout<<"LOOSE:"<<endl; FOR(i,iloose){ dcout<<loose[i]<<endl; if(life<=loose[i].d){ cout<<"NIE"<<endl; return 0; } life+=-loose[i].d+loose[i].h; } cout<<"TAK"<<endl; FOR(i,iwin)cout<<win[i].n<<" "; FOR(i,idraw)cout<<draw[i].n<<" "; FOR(i,iloose)cout<<loose[i].n<<" "; cout<<endl; 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 88 89 90 91 92 93 94 95 96 97 98 99 100 | #include<algorithm> //#include<stdio.h> #include<iostream> #include<list> #include<map> #include<queue> #define FOR(i,n) for(int i = 0;i<n;++i) #define FORI(i,b,n) for(int i = b;i<n;++i) #define FORD(i,n) for(int i = n;i>=0;--i) #define ZERO 0.000001 #define MAX ((1<<31)-1) #define qprintf debug && printf #define min(a,b) ((a)<(b)?(a):(b)) #define max(a,b) ((a)>(b)?(a):(b)) #define ull long long int using namespace std; int debug=0; #define dcout debug && cout class F { public: int n; int d; int h; }; ostream& operator<<(ostream& os, const F r) { os<<"["<<r.n<<","<<r.d<<","<<r.h<<"]"; return os; } struct C { bool operator()(F a, F b){ return a.d<b.d; } }; struct RC { bool operator()(F a, F b){ return a.h>b.h; } }; int main(){ ios_base::sync_with_stdio(0); int n; long long int life; cin>>n>>life; int iwin=0,iloose=0,idraw=0; F*win=new F[n]; F*loose=new F[n]; F*draw=new F[n]; FOR(i,n){ int d,h; cin>>d>>h; F*s = d<h? (win+(iwin++)) : (d>h? (loose+(iloose++)) : (draw+(idraw++))); s->n=i+1; s->d=d; s->h=h; dcout<<*s<<endl; } C c; RC rc; sort(win,win+iwin,c); sort(draw,draw+idraw,c); sort(loose,loose+iloose,rc); dcout<<"WINS:"<<endl; FOR(i,iwin){ dcout<<win[i]<<endl; if(life<=win[i].d){ cout<<"NIE"<<endl; return 0; } life+=-win[i].d+win[i].h; } dcout<<"DRAWS:"<<endl; FOR(i,idraw){ dcout<<draw[i]<<endl; if(life<=draw[i].d){ cout<<"NIE"<<endl; return 0; } } dcout<<"LOOSE:"<<endl; FOR(i,iloose){ dcout<<loose[i]<<endl; if(life<=loose[i].d){ cout<<"NIE"<<endl; return 0; } life+=-loose[i].d+loose[i].h; } cout<<"TAK"<<endl; FOR(i,iwin)cout<<win[i].n<<" "; FOR(i,idraw)cout<<draw[i].n<<" "; FOR(i,iloose)cout<<loose[i].n<<" "; cout<<endl; return 0; } |