传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3709
YM TimeMachine
首先把吃完能加血的boss挑出来,按d排序贪心吃
然后计算打完所有的最后的hp
倒着做
发现加血变减血,减血变加血
就和原来一样了
Code:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int n;
long long HP;
int a[maxn],d[maxn],anss[maxn];
bool cmp(int i,int j){
return d[i]<d[j];
}
bool grcmp(int i,int j){
return a[i]>a[j];
}
int getint(){
int res=0;char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))res=(res<<3)+(res<<1)+ch-'0',ch=getchar();
return res;
}
int main(){
n=getint();HP=getint();
for(int i=1;i<=n;i++){
d[i]=getint();a[i]=getint();
if(d[i]-a[i]<=0)anss[++anss[0]]=i;
}sort(anss+1,anss+1+anss[0],cmp);
for(int i=1;i<=anss[0];i++){
HP-=d[anss[i]];d[anss[i]]=-1;
if(HP<=0){puts("NIE");return 0;}
HP+=a[anss[i]];a[anss[i]]=-1;
}int size=anss[0];
for(int i=1;i<=n;i++)if(~d[i])
anss[++size]=i;
sort(anss+anss[0]+1,anss+1+n,grcmp);
for(int i=anss[0]+1;i<=n;i++)HP-=d[anss[i]],HP+=a[anss[i]];
if(HP<=0){puts("NIE");return 0;}
for(int i=n;i>=anss[0]+1;i--){
HP-=a[anss[i]];
if(HP<=0){puts("NIE");return 0;}
HP+=d[anss[i]];
}puts("TAK");
for(int i=1;i<=n;i++)
printf("%d ",anss[i]);
return 0;
}