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,但谁让我是蒟蒻呢!这题总的来说还是需要分析,目前的我看来难度不大!!!希望下次我们队不会爆零^_^.``