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

HDU 1527 (Wythoff 博弈) 取石子游戏

时间:2015-04-28 15:56:34      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:

对于Wythoff博弈中的两个数列,An和Bn有这样的关系:

An + n = Bn, An = floor(φ * n)

所以我们可以根据a b的差值来计算一个新的a出来看看这两个值是否相等。

想等的话,说明这个状态是个先手必败状态。

技术分享
 1 #include <cstdio>
 2 #include <cmath>
 3 #include <algorithm>
 4 using namespace std;
 5 
 6 const double phi = (sqrt(5.0) + 1.0) / 2.0;
 7 
 8 int main()
 9 {
10     int a, b;
11     while(scanf("%d%d", &a, &b) == 2)
12     {
13         if(a > b) swap(a, b);
14         int t = phi * (b - a);
15         if(a == t) puts("0"); else puts("1");
16     }
17 }
代码君

 

HDU 1527 (Wythoff 博弈) 取石子游戏

标签:

原文地址:http://www.cnblogs.com/AOQNRMGYXLMV/p/4463084.html

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