Wythoff's game

这个问题就是OJ题里出现的取石子游戏,http://en.wikipedia.org/wiki/Wythoff%27s_game。

维基里面的通项公式并不适用于算法求解。需要理解下面两条规律:

1、As is true in general for pairs of Beatty sequences, these two sequences are complementary: each positive integer appears exactly once in either sequence.

2、(m,n)中m-n是递增的,逐步加1

数对是递增的:(0,0) (1,2) (3,5) (4,7)(6,10)(8,13)

Wythoff's game

时间: 2024-10-19 06:54:47

Wythoff's game的相关文章

51nod1185(wythoff+高精度)

题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1185 题意:中文题诶- 思路:wythoff模板题,和51nod1072基本一样(http://www.cnblogs.com/geloutingyu/p/6198094.html),不过本题的数据比较大(1e18),会有精度问题; 我们可以: 令:cnt=abs(x-y); geloutingyu=1e9; a[3]={618033988, 7498948

nyoj Wythoff Game(暴力枚举)

Wythoff Game 时间限制:1000 ms |  内存限制:65535 KB 难度:1 描述 最近ZKC同学在学博弈,学到了一个伟大的博弈问题--威佐夫博弈. 相信大家都学过了吧?没学过?没问题.我将要为你讲述一下这个伟大的博弈问题. 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子. 游戏规定,每次有两种不同的取法: 一是可以在任意的一堆中取走任意多的石子: 二是可以在两堆中同时取走相同数量的石子. 最后把石子全部取完者为胜者. 我们今天要做的是求前n个必败态. 什么是必败态

博弈:巴什博奕(Bash Game)威佐夫博奕(Wythoff Game)尼姆博奕(Nimm Game)

巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.最后取光者得胜 对于巴什博弈可以考虑:n=(m+1)*k+s,即如果n%(m+1)!=0则先取者只需取走s物品即可保证获胜. HDU 1846:裸的. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<limits.h> t

[Wythoff博弈] poj 1067 取石子游戏

题目链接: http://poj.org/problem?id=1067 取石子游戏 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 33556   Accepted: 11180 Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完者为胜者.现在给出初始的两堆石

poj1067-取石子游戏-wythoff博弈

打表找规律失败,搜了一下原来是wythoff博弈 1 /*--------------------------------------------------------------------------------------*/ 2 3 #include <algorithm> 4 #include <iostream> 5 #include <cstring> 6 #include <ctype.h> 7 #include <cstdlib&g

hdu 1527 取石子游戏(Wythoff Game)

题意:Wythoff Game 思路:Wythoff Game #include<iostream> #include<stdio.h> #include<math.h> using namespace std; int main(){ int a,b,t; double gr=(sqrt(5)+1)/2;//黄金比例 golden ratio double a2; while(~scanf("%d%d",&a,&b)){ if(a&

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

对于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)

博弈——Bash、Nim、Wythoff

一.巴什博弈(Bash Game) 有一堆n个物品,两个人轮流从中取出(1~m)个:最后取光者胜. 结论:n = k * (m + 1) + r,r = 0,先手必输:r != 0,先手必胜. 二.尼姆博弈(Nimm Game) 有任意堆物品,每堆物品的个数是任意的,双方轮流从中取物品,每一次只能从一堆物品中取部分或全部物品,最少取一件,取到最后一件物品的人获胜. 结论:把每堆物品的数量全部异或起来,如果得到的值为0,那么先手必败,否则先手必胜. 三.威佐夫博奕(Wythoff Game) 有两

HDU 5973 Aninteresting game 威佐夫博奕(Wythoff Game)

HDU 5973:http://acm.hdu.edu.cn/showproblem.php?pid=5975 题意: 有两堆石子,每次可以从一堆石子中取任意个,或者从两堆石子中取相同个数的石子.两个人轮流用这种策略取石子,谁取完所有的石子就算胜利.问先手胜还是后手胜. 思路: 一模一样的威佐夫博奕(Wythoff Game),结论的是,假设a>b,那么如果((1+sqrt(5))* (a - b))/2 == b ,那么先手必输.但是这道题的数据比较大,所以需要java做高精度. import