【POJ】【1067】取石子游戏

博弈论

  这个是博弈游戏中的Wythoff博弈

以下为我的代码:

 1 //POJ 1067
 2 #include<cmath>
 3 #include<cstdio>
 4 #include<algorithm>
 5 int main(){
 6     freopen("1067.in","r",stdin);
 7     int a,b;
 8     double q=(1+sqrt(5.0))/2.0;
 9     while(scanf("%d%d",&a,&b)!=EOF){
10         if (a>b) std::swap(a,b);
11         int k=b-a;
12         printf("%d\n",a==(int)(k*q) ? 0 : 1);
13     }
14     return 0;
15 }

时间: 2024-10-24 08:47:32

【POJ】【1067】取石子游戏的相关文章

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

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

POJ - 1067 取石子游戏(包括贝蒂定理的巧妙证明)

关键词: 取石子游戏.威佐夫博奕.betty贝蒂定理.胜态.负态.状态转移.覆盖(分划).高斯函数.第二数学归纳法.黄金分割比例 题目: Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完者为胜者.现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者. Input 输入包含若干行,表示若干种石

POJ - 1067 - 取石子游戏 (威佐夫博奕)

题目传送:取石子游戏 威佐夫博奕(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜. 这种情况下是颇为复杂的.我们用(ak,bk)(ak ≤ bk ,k=0,1,2,...,n)表示两堆物品的数量并称其为局势,如果甲面对(0,0),那么甲已经输了,这种局势我们称为奇异局势.前几个奇异局势是:(0,0).(1,2).(3,5).(4,7).(6,10).(8,13).(9,15).(11,18).(12,2

[原博客] POJ 1067 取石子游戏

题目链接有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完者为胜者.现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者.(中文题面,感动ing) 但是这道题实在是呵呵.开始没啥思路,根据必胜状态必败状态的定义,n^3打了个表,看起来是这样的. 图为100x100,已经缩小,左上角是状态(0,0),右下角状态为(10

POJ 1067 取石子游戏

题目链接:http://poj.org/problem?id=1067 威佐夫博弈 (Wythoff game): 当两堆石子的数量符合特定关系时,先行者必赢.两堆石子分别有a,b个石子时(a<=b), floor( (b-a) * ( (sqrt(5)+1) /2 ) ) == a 时,先行者必输.代码如下: 1 #include <iostream> 2 #include <math.h> 3 #include <stdio.h> 4 #include <

POJ 1067 取石子游戏(威佐夫博弈)

传送门 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; int main() { int a,b; while(~scanf("%d%d",&a,&b)) { int ok=1; if(a>b) swap(a,b); int k=b-

【POJ】1067 取石子游戏

Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完者为胜者.现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者. Input 输入包含若干行,表示若干种石子的初始情况,其中每一行包含两个非负整数a和b,表示两堆石子的数目,a和b都不大于1,000,000,000. Output 输出对应也有

取石子游戏详解

http://blog.csdn.net/pipisorry/article/details/39249337 取石子游戏是一个古老的博弈游戏,发源于中国,它是组合数学领域的一个经典问题.它有许多不同的玩法,基本上是两个玩家,玩的形式是轮流抓石子,胜利的标准是抓走了最后的石子. 玩家设定: 先取石子的是玩家A,后取石子的是玩家B. 经典的三种玩法: 一.巴什博奕(Bash Game),有1堆含n个石子,两个人轮流从这堆物品中取物,规定每次至少取1个,最多取m个.取走最后石子的人获胜. 二.尼姆博

poj 1067||hdu 1527 取石子游戏(博弈论,Wythoff Game)

取石子游戏 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 37893   Accepted: 12684 Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完者为胜者.现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者

Games:取石子游戏(POJ 1067)

取石子游戏 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 37662   Accepted: 12594 Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完者为胜者.现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者