Pku 1067 取石子游戏
2011-03-27 10:13
267 查看
Pku 1067 取石子游戏
题目:
有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。
分析:
威佐夫博弈
有若干堆石子,两个人轮流从某一堆中或同时从两堆中去同样多的石子,规定每次至少去一个,多则不限,最后一个取光石子的人获胜。
假设有A、B二人,A先开始去。
如果面对的(0,0),那么A已输了,这种局势成为奇异局势,在这种局势下,A必败。
所以只要判断A所遇到的局势是否为奇异局势就可以了。
先找去前几个奇异局势:(0,0)、(1,2)、(3,5)、(4,7)、(6,10)。。。
若任意给定一个局势(a,b),怎样判断?
根据公式有:ak =[k(1+√5)/2],bk= ak + k (k=0,1,2,...,n 方括号表示取整函数),观察发现其中出现了黄金分割(1+√5)/2 = 1.618..., 因此,由ak,bk组成的矩形近似为黄金矩形,令r=1.618…..,R=1/r=0.6180339887,只需要判断a==k*R,只要求出k即可,又有k=b-a。
题目:
有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。
分析:
威佐夫博弈
有若干堆石子,两个人轮流从某一堆中或同时从两堆中去同样多的石子,规定每次至少去一个,多则不限,最后一个取光石子的人获胜。
假设有A、B二人,A先开始去。
如果面对的(0,0),那么A已输了,这种局势成为奇异局势,在这种局势下,A必败。
所以只要判断A所遇到的局势是否为奇异局势就可以了。
先找去前几个奇异局势:(0,0)、(1,2)、(3,5)、(4,7)、(6,10)。。。
若任意给定一个局势(a,b),怎样判断?
根据公式有:ak =[k(1+√5)/2],bk= ak + k (k=0,1,2,...,n 方括号表示取整函数),观察发现其中出现了黄金分割(1+√5)/2 = 1.618..., 因此,由ak,bk组成的矩形近似为黄金矩形,令r=1.618…..,R=1/r=0.6180339887,只需要判断a==k*R,只要求出k即可,又有k=b-a。
#include <stdio.h> #include <math.h> int main() { int a,b,k,temp,data; double r=0.6180339887,R=1/r; while(scanf("%d %d",&a,&b)==2) { if(a>b){ temp=b; b=a; a=temp; } k =b-a; data=(int)(k*R); if(a==data) printf("%d/n",0); else printf("%d/n",1); } return 0; }
相关文章推荐
- PKU-1067 取石子游戏 (威佐夫博奕(Wythoff Game))
- PKU 1067 取石子游戏
- pku1067----取石子游戏(博弈)
- PKU 1067 取石子游戏
- HDU 1527 (POJ 1067) 取石子游戏 Wythoff Game
- [ACM] poj 1067 取石子游戏(威佐夫博奕)
- POJ 1067 取石子游戏(威佐夫博弈)
- POJ 1067 取石子游戏
- poj 1067 取石子游戏(威佐夫博奕(Wythoff Game))
- poj 1067 取石子游戏(威佐夫博弈)
- [转]POJ 1067:取石子游戏
- POJ1067 取石子游戏
- POJ-1067:取石子游戏
- POJ 1067 取石子游戏 <威佐夫博弈>
- POJ - 1067 - 取石子游戏 (威佐夫博奕)
- POJ 1067 取石子游戏 (威佐夫博奕,公式)
- POJ 1067 取石子游戏
- POJ 1067 取石子游戏
- POJ 1067 取石子游戏(威佐夫博弈)
- poj 1067 取石子游戏(威佐夫博弈)