思路:由于数据很大,先通过打表找规律可以知道,
当n为偶数的时候其SG值为n/2;
当n为奇数的时候一直除2,直到为偶数m,则SG值为m/2;
代码如下:
1 #include<stdio.h> 2 int cal(int m) 3 { 4 while(m&1) m>>=1; 5 return m>>1; 6 } 7 int main() 8 { 9 int t,n,ca=0,a; 10 scanf("%d",&t); 11 while(t--){ 12 scanf("%d",&n); 13 int ans=0; 14 for(int i=0;i<n;i++){ 15 scanf("%d",&a); 16 ans^=cal(a); 17 } 18 printf("Case %d: %s ",++ca,ans?"Alice":"Bob"); 19 } 20 return 0; 21 }