hdu_5795_A Simple Nim(打表找规律的博弈)

题目链接:hdu_5795_A Simple Nim

题意:

有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 }
View Code
原文地址:https://www.cnblogs.com/bin-gege/p/5737895.html