#include<stdio.h> #include<iostream> #include<stdlib.h> #include<vector> #include<list> #include<math.h> #include<algorithm> #include<string> #include<set> #include<queue> #define limit 1048576 #define inf 9223372036854775807ll #define iinf 2147483647 #define mp make_pair #define pb push_back #define rep(i,k,n) for(int i=k;i<n;i++) using namespace std; vector<pair<pair<int,int>,int> > dmg; vector<pair<pair<int,int>,int> > heal; vector<int> ans; int main(){ int temp1,temp2; long long n,z; bool ok=true; scanf("%lld%lld",&n,&z); rep(i,1,n+1){ scanf("%d%d",&temp1,&temp2); if(temp1>temp2) dmg.pb(mp(mp(temp2,temp1),i)); else heal.pb(mp(mp(temp1,temp2),i)); } sort(dmg.rbegin(),dmg.rend()); sort(heal.begin(),heal.end()); rep(i,0,heal.size()){ ans.pb(heal[i].second); z-=heal[i].first.first; if(z<=0) ok=false; z+=heal[i].first.second; } rep(i,0,dmg.size()){ ans.pb(dmg[i].second); z-=dmg[i].first.second; if(z<=0) ok=false; z+=dmg[i].first.first; } if(ok){ printf("TAK\n"); rep(i,0,ans.size()) printf("%d ",ans[i]); } else printf("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 | #include<stdio.h> #include<iostream> #include<stdlib.h> #include<vector> #include<list> #include<math.h> #include<algorithm> #include<string> #include<set> #include<queue> #define limit 1048576 #define inf 9223372036854775807ll #define iinf 2147483647 #define mp make_pair #define pb push_back #define rep(i,k,n) for(int i=k;i<n;i++) using namespace std; vector<pair<pair<int,int>,int> > dmg; vector<pair<pair<int,int>,int> > heal; vector<int> ans; int main(){ int temp1,temp2; long long n,z; bool ok=true; scanf("%lld%lld",&n,&z); rep(i,1,n+1){ scanf("%d%d",&temp1,&temp2); if(temp1>temp2) dmg.pb(mp(mp(temp2,temp1),i)); else heal.pb(mp(mp(temp1,temp2),i)); } sort(dmg.rbegin(),dmg.rend()); sort(heal.begin(),heal.end()); rep(i,0,heal.size()){ ans.pb(heal[i].second); z-=heal[i].first.first; if(z<=0) ok=false; z+=heal[i].first.second; } rep(i,0,dmg.size()){ ans.pb(dmg[i].second); z-=dmg[i].first.second; if(z<=0) ok=false; z+=dmg[i].first.first; } if(ok){ printf("TAK\n"); rep(i,0,ans.size()) printf("%d ",ans[i]); } else printf("NIE"); return 0; } |