hdu——3032(博弈之寻找sg函数)

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3032

g(0)=0,g(1)=1。
状态2的后继有0,1和(1,1),它们的SG函数值分别是0,1和0,
所以g(2)=2。状态3的后继有0,1,2和(1,2),它们的SG函数
值分别是0,1,2和3,所以g(3)=4。
状态4的后继有0,1,2,3,(1,3)和(2,2),它们的SG函数
值分别是0,1,2,4,5和0,所以g(4)=3。我们推测:对于所有
的k>=0,有g(4k+1)=4k+1;g(4k+2)=4k+2;g(4k+3)=4k+4;g(4k+4)=4k+3。
注:也可以根据需要打出表来看。

#include <iostream>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
typedef long long ll; 
#define MAX(a,b) a>b?a:b
#define MIN(a,b) a>b?b:a
#define N 1005
int a[N];
/*void find_sg()
{
	int ans;
	a[0]=0;
	int flag[N];
	int j;
	for(int i=1;i<N/10;i++)
	 {
	 	memset(flag,0,sizeof(flag));
	 	for(j=0;j<i;j++)
	 	{
	 		flag[a[j]]=1;
	 	}
	 	for(j=0;j<=i/2;j++)
	 	{
	 		int temp=a[j]^a[i-j];
	 		flag[temp]=1;
	 	}
	 	for(j=0;j<N;j++)
	 	 if(!flag[j]) break;
 	    a[i]=j;
 	    cout<<j<<" "<<i<<endl;
 	 }
}*/
int main()
{
	int i,j,k,st,n,t;
	//find_sg();
	cin>>t;
	while(t--)
	{
	 cin>>n;
	 int num,ans=0;
	 while(n--)
	 {
 		cin>>num;
 		if(num%4==3) ans^=(num+1);
 		else if(num%4==0) ans^=(num-1);
 		else ans^=num;
 	 } 
 	 if(ans==0) cout<<"Bob"<<endl;
 	 else cout<<"Alice"<<endl;
	}
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值