码迷,mamicode.com
首页 > 其他好文 > 详细

[博弈]受限Nim游戏

时间:2014-08-16 17:02:30      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   for   ar   

题目大意:有N(1<=N<=100)堆石子,每堆个数给定A1..AN(1<=Ai<=2,147,483,647),现有甲乙两人轮流取石子,由甲开始,每次选一堆,取走一定数目石子,1到Ai的一半取下整,如Ai=5时,可取1或2,Ai=6时,可取1或2或3,但Ai=1不能取。不能取者负,求甲是否获胜。假定每人都采取最优策略。

这是我第一道用sg来做的题目,先贴一个链接,此人对sg的介绍非常好,至少我一遍看懂了,非常感谢。http://blog.163.com/scuqifuguang@126/blog/static/171370086201101711276278/

 

在说这道题吧,我们可以非常容易地写出sg函数表达式,sg(i)=mex{sg(i-k)} ∈(1,i/2),然后我通过程序发现了一个规律,对于一个数x,它的sg函数值即为

f(x)/2,其中f(x)为x不停地除以2直到它为偶数为止。代码挺短的,贴一个。

bubuko.com,布布扣
 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 long long  ans=0;
 5 int T;
 6 int n;
 7 int main()
 8 {
 9     scanf("%d",&T);
10     while(T--)
11     {
12         scanf("%d",&n);
13         ans=0;
14         for(int i=1;i<=n;i++)
15         {
16             long  long x;
17             scanf("%I64d",&x);
18             while(x&1)x/=2;
19             x/=2;
20             ans^=x;
21         }
22         if(ans)puts("Win");else puts("Lose");
23     }
24     return 0;
25 }
26             
View Code

 

[博弈]受限Nim游戏,布布扣,bubuko.com

[博弈]受限Nim游戏

标签:style   blog   http   color   os   io   for   ar   

原文地址:http://www.cnblogs.com/sillygirl/p/3916550.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!