题目链接:https://vjudge.net/contest/341314#problem/E
分析:
此题,百小度战胜一个和他此时战力相同的Acmer是关键。想要战力最大,刚开始就提升最大k点,接下来k–。
所以战胜与不战胜的分界点是关键。
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
const int N=1e4+10;
LL power[N],m,k;
int n;
int main()
{
int T;
scanf("%d",&T);
int f=1,flag;
while(T--)
{
flag=1;
scanf("%d%lld%lld",&n,&m,&k);
for(int i=1; i<=n; i++)
scanf("%lld",&power[i]);
printf("Case #%d:\n",f++);
sort(power+1,power+1+n);
if(m<power[1])
{
printf("madan!\n");
continue;
}
if(m>=power[n])
{
printf("why am I so diao?\n");
continue;
}
for(int i=1; i<=n;)
{
if(m>=power[i])
i++;
else
{
m=power[i-1]+k;/*百小度的战力减小到和power[i-1]相等,以此来提升战力*/
if(m<power[i])
{
flag=0;
break;
}
i++;
k--;
}
if(i==n+1)
break;
}
if(flag)
printf("why am I so diao?\n");
else
printf("madan!\n");
}
return 0;
}