题解:打表可得到偶数是的sg函数等于其本身的一半,然后考虑奇数时,由于每次取不超过1/2,则奇数n的后继状态相对于前一个偶数少了偶数1/2的状态,由于偶数的sg为其本身的1/2,则奇数的sg就是sg[n/2];
AC代码:
#include<stdio.h>
#include<algorithm>
#include<iostream>
#define ll long long
using namespace std;
const int maxn=10000;
int getsg(int x){
while(1){
if(x%2==0)
return x/2;
x=(x-1)/2;
}
}
int main(){
int t;
scanf("%d",&t);
for(int t1=1;t1<=t;t1++){
int n,sg=0;
scanf("%d",&n);
for(int a=1;a<=n;a++){
int i;
scanf("%d",&i);
sg^=getsg(i);
}
printf("Case %d: ",t1);
if(sg!=0)
printf("Alice\n");
else
printf("Bob\n");
}
}