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