题目地址: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;
}