2 5 11 3 15 13 10 9 8 5 11 3 8 9 10 13 16
Case #1: why am I so diao? Case #2: madan!Hint第一组样例解释 5个ACMer,初始战斗力选择范围是[0,11],接下来每场战斗力提升上限是3,2,1,0,0,...,0 百小度首先使得自己的初始战斗力为10,打败战斗力为10的第一个ACMer, 然后选择战斗力提升3,变成13,打败战斗力为13的第二个ACMer, 然后选择战斗力提升2,变成15,打败战斗力为15的第三个ACMer, 之后再以任意顺序打败剩下的ACMer
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
long long a[10010];
int main()
{
int T,i,add=1;
long long n,k,m,bxd,temp;
scanf("%d",&T);
while(T--)
{
memset(a,0,sizeof(a));
scanf("%lld%lld%lld",&n,&m,&k); //n个人,百小度的初始化战斗力上限m,潜力值k
for(i=1;i<=n;i++)
{
scanf("%lld",&a[i]); //读入大汉战斗力
}
sort(a+1,a+n+1); //先把大汉的战斗力全部排序
for(i=1;i<=n;i++)
{
if(a[i]>m) //如果当前大汉战斗力比百小度战斗力上限还大
{
bxd=a[i-1]; //则bxd记录小于百小度战斗力上限的大汉战斗力的最大值,百小度初始化战斗力决定和该大汉相等!
temp=i; //temp则记录刚好大于百小度战斗力上限的大汉下标
break;
}
}
printf("Case #%d:\n",add); //输出计数器,add
if(m>=a[n]) //如果百小度的战斗力上限比战斗力最高的大汉的战斗力都大
{
printf("why am I so diao?\n"); //那么赢定了!
goto p;
}
if(m<a[1]) //如果百小度的战斗力上限比战斗力最小的大汉的战斗力都小
{
printf("madan!\n"); //那么输定了!
goto p;
}
for(i=temp;i<=n;i++) //从那个刚好大于百小度战斗力上限的大汉往后遍历
{
if(bxd+k>=a[i]&&bxd+k<a[i+1]) //如果百小度战斗力加上提升的k比当前大汉大并且小于下一个大汉的战斗力
{
bxd=a[i]; //那么获胜!
k--; //潜力上限k=k-1
}
}
if(bxd+k>=a[n]) //在百小度战斗力加到最大值能否打败战斗力最高的大汉
{
printf("why am I so diao?\n"); //大于则获胜!
}
else
printf("madan!\n"); //否则输!
p:add++; //计数器自加
}
return 0;
}
(HDU-5246)2015Astar-初赛-1001-超级赛亚ACMer
原文地址:http://blog.csdn.net/qq_16542775/article/details/46300141