题意:
有N堆石子,你可以取每堆的1-m个,也可以将这堆石子分成3堆,问你先手输还是赢
题解:
打表找规律可得:
sg[0]=0
当x=8k+7时sg[x]=8k+8,
当x=8k+8时sg[x]=8k+7,
其余时候sg[x]=x;(k>=0)
1 #include<cstdio> 2 3 int main() 4 { 5 int t,n,ans,tp; 6 scanf("%d",&t); 7 while(t--) 8 { 9 scanf("%d",&n),ans=0; 10 for(int i=1;i<=n;i++) 11 { 12 scanf("%d",&tp); 13 if(!tp)continue; 14 if(tp%8==0)ans^=tp-1; 15 else if(tp%8==7)ans^=tp+1; 16 else ans^=tp; 17 } 18 if(ans)puts("First player wins."); 19 else puts("Second player wins."); 20 } 21 return 0; 22 }
时间: 2024-10-13 05:44:45