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