题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5246
解题思路:先排序,在采用贪心的方法,先给百小度找到合适的初始战斗力,找到比初始战斗力上限小的中最大的来打,并将初始战斗力和他设置成相同的即可。接下来就是提升战斗力了,如果当前战斗力power+k >= a[i],说明第i个对手是可以打败的并且能够获得战斗力的提升。
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
__int64 a[10010];
int main()
{
int t;
scanf("%d",&t);
while (t--)
{
__int64 n,m,k;
int i;
scanf("%I64d%I64d%I64d",&n,&m,&k);
for (int i=1; i<=n; i++)
{
scanf("%I64d",&a[i]);
}
printf ("Case #%d:\n",f++);
sort(a+1,a+n+1);
if(a[1] > m)
{
printf ("madan!\n");
continue;
}
if(a[n] <= m)
{
printf ("why am I so diao?\n");
continue;
}
__int64 power=0;
int flag=0;
for(i = 2; i <= n; i++)
{
if(flag == 0)
{
if(a[i] > m)
{
power = a[i-1];
flag = 1;
if(power + k < a[i])
break;
}
continue;
}
if(power + k < a[i])
{
power = a[i-1];
k--;
if(power + k < a[i])
break;
}
}
if(i > n)
printf ("why am I so diao?\n");
else
printf ("madan!\n");
}
return 0;
}