分析:先把每个挑战者的战斗力升序排序,接着找出离m最近的小于m的挑战者的战斗力,然后从该处开始,对后面的每个挑战者进行处理,尽量使百小度提升战斗力后等于后一个挑战者的战斗力。如果激发战斗力后还无法打赢则不行,否则使其相等。
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int T,t,n,m,k,i;
__int64 a[10005];
__int64 cnt;
int tmp;
bool fg;
cin>>T;
t=0;
while(T--)
{
cin>>n>>m>>k;
for(i=0;i<n;i++)
scanf("%I64d",&a[i]);
sort(a,a+n); //从小到达排序
cout<<"Case #"<<++t<<":"<<endl;
if(a[0]>m)
{
puts("madan!");
continue;
}
if(a[n-1]<=m)
{
puts("why am I so diao?");
continue;
}
fg=true;
cnt=m;
for(i=0;i<n;i++)
if(a[i]>m)
{
cnt=a[i-1];
tmp=i;
break;
}
for(i=tmp;i<n;i++)
if(cnt+k<a[i])
{
fg=false;
break;
}
else
{
cnt=a[i];
if(k>0) k--;
}
if(fg) puts("why am I so diao?");
else puts("madan!");
}
return 0;
}
原文地址:http://blog.csdn.net/a809146548/article/details/46311143