1.题目大意:有m个数字写在黑板上,如果存在数字再在黑板,并且不存在0的数,Alice可以将数字分成两组,Bob可以选择一组数字擦掉,剩下一组数字则全部减1. 获胜条件:任何时间都存在为0的数,Alice获胜。否则,如果全部数字都被擦掉,则Bob胜利
2.分析:因为都为最优策略,所以我们可得Alice为了获胜,应尽可能将同一数字分为两组,如0个0,3个1.此时Alice将1分为2个1和1个1两组,则无论Bob擦掉哪一组,剩下那组都为0.Alice必胜。同理我们可得到一个式子,a[i-1]+=a[i]/2.这是由上诉分析可得。我们从n出发,最后得到a[0]的个数,个数大于0则输出Alice,反之输出Bob.
3.代码:
#include<stdio.h>
#include<algorithm>
int a[1000005];
using namespace std;
int main(){
int t;
int n;
int minFlag;
cin>>t;
while(t>0){
cin>>n;
for(int i=0;i<=n;i++){
scanf("%d",&a[i]);
}
if(a[0]>0)
cout<<"Alice"<<endl;
else{
for(int i=n;i>0;i--){
a[i-1]+=a[i]/2;
}
if(a[0]>0)
cout<<"Alice"<<endl;
else
cout<<"Bob"<<endl;
}
t--;
}
return 0;
}
`
4.总结:本题虽然没有在场上ak,但谁让我是蒟蒻呢!这题总的来说还是需要分析,目前的我看来难度不大!!!希望下次我们队不会爆零^_^.``