uva 1482 - Playing With Stones

对于组合游戏的题;

首先把问题建模成NIM等经典的组合游戏模型;

然后打表找出,或者推出SG函数值;

最后再利用SG定理判断是否必胜必败状态;

 1 #include<cstdio>
 2 #define ll long long
 3 using namespace std;
 4 
 5 ll sg(ll x)
 6 {
 7     return x%2==0 ? x/2 : sg(x/2);
 8 }
 9 
10 int main()
11 {
12     int t;
13     scanf("%d",&t);
14     while(t--)
15     {
16         int n;
17         ll a,ans=0;
18         scanf("%d",&n);
19         for(int i=0;i<n;i++)
20         {
21             scanf("%lld",&a);
22             ans^=sg(a);
23         }
24         puts(ans==0?"NO":"YES");
25     }
26     return 0;
27 }
View Code

 

posted @ 2013-11-01 23:17  Yours1103  阅读(229)  评论(0编辑  收藏  举报