#include<iostream> #include<algorithm> using namespace std; struct walka{ int id; int minhp; int reward; }; bool magic(walka a, walka b){ if(a.reward < 0){ if(b.reward >= 0){ return false; }else{ if(a.minhp == b.minhp) return a.id < b.id; return a.minhp > b.minhp; } }else{ if(b.reward < 0){ return true; }else{ if(a.minhp == b.minhp) return a.id < b.id; return a.minhp < b.minhp; } } } int a, b, pz, n; walka walki[100001]; int main(){ cin>>n >>pz; for(int i=0; i<n; i++){ cin>>a >>b; walki[i].id = i; walki[i].minhp = a; walki[i].reward = b - a; } sort(walki, walki+n, magic); for(int i=0; i<n; i++){ if(pz>walki[i].minhp){ pz+=walki[i].reward; }else{ cout<<"NIE"<<endl; return 0; } if(pz <= 0){ cout<<"NIE"<<endl; return 0; } } cout<<"TAK" <<endl; for(int i=0; i<n; i++){ cout<<walki[i].id+1 <<" "; } 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 | #include<iostream> #include<algorithm> using namespace std; struct walka{ int id; int minhp; int reward; }; bool magic(walka a, walka b){ if(a.reward < 0){ if(b.reward >= 0){ return false; }else{ if(a.minhp == b.minhp) return a.id < b.id; return a.minhp > b.minhp; } }else{ if(b.reward < 0){ return true; }else{ if(a.minhp == b.minhp) return a.id < b.id; return a.minhp < b.minhp; } } } int a, b, pz, n; walka walki[100001]; int main(){ cin>>n >>pz; for(int i=0; i<n; i++){ cin>>a >>b; walki[i].id = i; walki[i].minhp = a; walki[i].reward = b - a; } sort(walki, walki+n, magic); for(int i=0; i<n; i++){ if(pz>walki[i].minhp){ pz+=walki[i].reward; }else{ cout<<"NIE"<<endl; return 0; } if(pz <= 0){ cout<<"NIE"<<endl; return 0; } } cout<<"TAK" <<endl; for(int i=0; i<n; i++){ cout<<walki[i].id+1 <<" "; } cout<<endl; return 0; } |