题意:一个初始战斗力上限为m的选手,和战斗力相同的人战斗后,该选手最多可提升k点战斗力,每提升一次k值减一;和战斗力低于他的人战斗,战斗力不变;
n名挑战者,给出每名挑战者的战斗力,问他是否能将挑战者全部打败;
思路:先sort,然后找到和他初始战斗力上限最接近的且比他弱的战斗力,然后根据下一个比他强的人提升战斗力,看是否能打败最后一个;
比赛的时候思路完全正确,然后TLE了。补题是终于发现是for里面漏了一个条件,考虑的不仔细。弱!!!
#include#include #include using namespace std;#define INF 0x3f3f3f3f__int64 a[50010],m,k;__int64 temp,shu;int main(){ int t,i,j,n,cas,point,cc,c1,flag,pos; scanf("%d",&t); for(cas=1;cas<=t;cas++) { scanf("%d%I64d%I64d",&n,&m,&k); memset(a,0,sizeof(a)); temp=k*(k+1)/2; for(i=0;i m) { printf("madan!\n"); continue; } if(a[n-1]<=m) { printf("why am I so diao?\n"); continue; } for(i=0;i m) { pos=i;shu=a[pos-1]; break; } } pos--; flag=1; while(pos!=(n-1)) { if(k==0||(shu+k) 0) k--; } if(flag) { printf("why am I so diao?\n"); } else printf("madan!\n"); }}