#include<cstdio> #include<vector> #include<algorithm> #define pb push_back #define sd second #define ft first using namespace std; typedef pair<int,int> pii; typedef pair<pii,int> ppi; vector<ppi>p,m; vector<int>ans; int HP,n; bool comp(ppi a,ppi b) { return a.ft.ft>b.ft.ft; } bool solve() { for(int i=0;i<p.size();i++) { if(p[i].ft.ft>HP)return false; HP+=p[i].ft.sd; ans.pb(p[i].sd); } p.clear(); int szukany; for(int i=0;i<m.size();i++) { while(!p.empty() && HP+p.back().ft.sd>=m[i].ft.ft && HP>=p.back().ft.ft) { HP+=p.back().ft.sd; ans.pb(p.back().sd); p.pop_back(); } p.pb(m[i]); } while(!p.empty() && HP>=p.back().ft.ft) { HP+=p.back().ft.sd; ans.pb(p.back().sd); p.pop_back(); } if(HP<=0 || !p.empty())return false; return true; } int main() { scanf("%d%d",&n,&HP); for(int i=1;i<=n;i++) { int a,b; scanf("%d%d",&a,&b); if(b-a<0)m.pb(ppi(pii(a+1,b-a),i)); else p.pb(ppi(pii(a+1,b-a),i)); } sort(p.begin(),p.end()); sort(m.begin(),m.end(),comp); if(solve()) { printf("TAK\n"); for(int i=0;i<ans.size();i++)printf("%d ",ans[i]); printf("\n"); } else printf("NIE\n"); 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 | #include<cstdio> #include<vector> #include<algorithm> #define pb push_back #define sd second #define ft first using namespace std; typedef pair<int,int> pii; typedef pair<pii,int> ppi; vector<ppi>p,m; vector<int>ans; int HP,n; bool comp(ppi a,ppi b) { return a.ft.ft>b.ft.ft; } bool solve() { for(int i=0;i<p.size();i++) { if(p[i].ft.ft>HP)return false; HP+=p[i].ft.sd; ans.pb(p[i].sd); } p.clear(); int szukany; for(int i=0;i<m.size();i++) { while(!p.empty() && HP+p.back().ft.sd>=m[i].ft.ft && HP>=p.back().ft.ft) { HP+=p.back().ft.sd; ans.pb(p.back().sd); p.pop_back(); } p.pb(m[i]); } while(!p.empty() && HP>=p.back().ft.ft) { HP+=p.back().ft.sd; ans.pb(p.back().sd); p.pop_back(); } if(HP<=0 || !p.empty())return false; return true; } int main() { scanf("%d%d",&n,&HP); for(int i=1;i<=n;i++) { int a,b; scanf("%d%d",&a,&b); if(b-a<0)m.pb(ppi(pii(a+1,b-a),i)); else p.pb(ppi(pii(a+1,b-a),i)); } sort(p.begin(),p.end()); sort(m.begin(),m.end(),comp); if(solve()) { printf("TAK\n"); for(int i=0;i<ans.size();i++)printf("%d ",ans[i]); printf("\n"); } else printf("NIE\n"); return 0; } |