poj1067取石子游戏威佐夫博弈博弈论

鲸头鹳 鲸头鹳     2022-10-03     687

关键词:

http://poj.org/problem?id=1067

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

Input

输入包含若干行,表示若干种石子的初始情况,其中每一行包含两个非负整数a和b,表示两堆石子的数目,a和b都不大于1,000,000,000。

Output

输出对应也有若干行,每行包含一个数字1或0,如果最后你是胜者,则为1,反之,则为0。
 
算是结论的题,需要记住下面的结论。
 
两数之差为k,那么对应的奇异局势(己方面对此局势必输)的两个数应该为
ak=k*(√5+1)/2  (向下取整)
bk=ak+k;
由于任何一个非奇异局势都可以通过一次取石子变成奇异局势,我们只需要判断a和b是否构成奇异局势就能确定游戏结果。
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<cmath>
 5 #include<iostream>
 6 #include<map>
 7 using namespace std;
 8 int a,b;
 9 int main(){
10     while(~scanf("%d%d",&a,&b)){
11         if(a<b){//神奇的换位方法
12             a^=b;b^=a;a^=b;
13         }
14         int k=a-b;
15         a=(int)((double)k*(1+sqrt(5.0))/2);
16         if(a==b){
17             printf("%d\n",0);
18         }
19         else{
20             printf("%d\n",1);
21         }
22     }
23     return 0;
24 }
View Code

 

poj1067威佐夫博弈

链接:http://poj.org/problem?id=1067题意:威佐夫博弈(WythoffGame):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。题解:威佐夫博弈(WythoffGame):... 查看详情

poj1067取石子游戏

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

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

TimeLimit:2000/1000MS(Java/Others)    MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):8509    AcceptedSubmission(s):4833ProblemDescription有两堆石子,数量任意,可以不 查看详情

hdu1527取石子游戏(威佐夫博弈)(代码片段)

取石子游戏TimeLimit:2000/1000MS(Java/Others)    MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):8514    AcceptedSubmission(s):4837ProblemDescription有两堆石子,数量任 查看详情

hdu1527取石子游戏(威佐夫博弈)(代码片段)

取石子游戏TimeLimit:2000/1000MS(Java/Others)    MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):9725    AcceptedSubmission(s):5605ProblemDescription有两堆石子,数量任 查看详情

hdu1527取石子游戏威佐夫博弈

题目来源:HDU1527取石子游戏题意:中文思路:威佐夫博弈必败态为(a,b)ai+i=bi    ai=i*(1+sqrt(5.0)+1)/2  这题就求出i然后带人i和i+1推断是否成立下面转自网上某总结有公式ak=[k(1+√5)/2],bk=ak+k (k=0。1,... 查看详情

[shoi2002]取石子游戏-威佐夫博弈(代码片段)

Description有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现... 查看详情

51nod1185威佐夫游戏v2(威佐夫博弈)

...bsp;KB分值: 0 难度:基础题 收藏 关注有2堆石子。AB两个人轮流拿,A先拿。每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取。拿到最后1颗石子的人获胜。假设AB都非常聪明,拿石子的过程中不... 查看详情

洛谷p2252取石子游戏(威佐夫博弈)

题目背景无题目描述有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子... 查看详情

博弈论-威佐夫博弈

理论分析问题:首先有两堆石子,博弈双方每次可以取一堆石子中的任意个,不能不取,或者取两堆石子中的相同个。先取完者赢。分析:首先我们根据条件来分析博弈中的奇异局势第一个(0,0),先手输,当游戏某一方面对... 查看详情

hdu2177取(2堆)石子游戏(威佐夫博弈)(代码片段)

HDU2177取(2堆)石子游戏ProblemDescription有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石... 查看详情

题解报告:hdu1527取石子游戏(威佐夫博弈)(代码片段)

...http://acm.hdu.edu.cn/showproblem.php?pid=1527ProblemDescription有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走... 查看详情

博弈论入门之威佐夫博弈(代码片段)

更好的阅读体验点这里威佐夫博弈威佐夫博弈是一类经典的博弈问题有两堆石子,两个顶尖聪明的人在玩游戏,每次每个人可以从任意一堆石子中取任意多的石子或者从两堆石子中取同样多的石子,不能取得人输,分析谁会获得... 查看详情

巴仕博弈+威佐夫博弈(代码片段)

...1到m个石子,不能拿的人为败者,问谁会胜利巴什博奕是博弈论问题中基础的问题它是最简单的一种情形对应一种状态的博弈博弈分析如果有m+1个石子,那么先手必定无法取完全部,但后手可以取完剩下的部分,使得先手没有石... 查看详情

51nod1072威佐夫游戏(简单博弈)

...www.51nod.com/onlineJudge/questionCode.html#!problemId=1072题意:有2堆石子。AB两个人轮流拿,A先拿。每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取。拿到最后1颗石子的人获胜。假设AB都非常聪明,拿石子的过程中不... 查看详情

博弈论威佐夫博弈

...获胜,请问先手还是后手胜?   对于学过一些博弈论基础的来说,我们需要找到那些能让先手必输的局势,那么由这些局势在规定范围内拓展的局势也是先手必输的局势(但在这里双方自由选取,不适用)。我们可以得... 查看详情

威佐夫博弈

...样威佐夫也有一个经典的例题:1.有两堆数量分别为n,m个石子的石子堆;2.两个人轮流取石子,可以在一堆石子中取任意个,或者,在两堆石子中每堆石子取相同数目的石子; 输出:如果先手赢,输出1,否则输出0。 题解... 查看详情

威佐夫博弈入门小结

威佐夫博弈今天新学了个博弈论的东西(还未理解透彻)威佐夫博弈的题型是:一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。这里提到了一个概念:奇... 查看详情