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