题目链接

POJ-1067 取石子游戏

题目大意

有两堆石子,数量分别为\(a,b\),两个人轮流取石子。每次有两种不同的取法:一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最优策略,问最后你是胜者还是败者?

Sample Input

2 1
8 4
4 7

Sample Output

0
1
0

思路

直接是:威佐夫博弈。
这个过于繁琐,只能运用现成的结论。
设奇异局势(必败局势)为(a[i],b[i]) (a[i],b[i]),则有a[0]=b[0]=0a[0]=b[0]=0;a[k]=a[k]=前面未出现的最小自然数,b[k]=a[k]+kb[k]=a[k]+k
具体求解公式:a[k]=k∗1+5√2a[k]=k*\frac{ 1+\sqrt{5} } {2},b[k]=a[k]+k=k∗3+5√2b[k]=a[k]+k= k*\frac { 3+\sqrt{5} } {2}

奇异局势的性质:
1.任何自然数包含在且仅包含在一个奇异局势中
a[k]>a[k−1]a[k]>a[k-1],b[k]=a[k]+k>a[k−1]+k−1=b[k−1]>a[k−1]b[k]=a[k]+k>a[k-1]+k-1=b[k-1]>a[k-1],则任意奇异局势中不存在相同的自然数(除了(0,0)(0,0)),又a[k]a[k]前面未出现的最小自然数,则任何自然数均会出现在奇异局势中
2.任意操作均为将奇异局势变为非奇异局势
①在一堆中取石子,由于另一堆中的数不会出现在其他奇异局势中,则新局势必定非奇异局势
②在两堆中同时取石子,由于两堆石子差值不变,而序号为差值的奇异局势唯一,则新局势必定非奇异局势
3.任意非奇异局势可以通过特定操作转化为奇异局势
设当前局势为(a,b) (a,b) 。
①a==ba==b时:同时从两堆取走aa个石子,转化为(0,0) (0,0)
②a==a[k]&&b>b[k]a==a[k]\&\&b> b [k]时:从第二堆取走b−b[k]b-b[k]个石子,转化为(a,b[k]) (a,b[k])
③a==a[k]&&b<b[k]a==a[k]\&\&b时:同时从两堆取走a−a[b−a]a-a[b-a]个石子,转化为(a[b−a],b−a+b[b−a]) (a[b-a],b-a+b[b-a])
④a>a[k]&&b==b[k]a> a[k]\&\&b==b[k]时:从第一堆取走a−a[k]a-a[k]个石子,转化为(a[k],b) (a[k],b)
⑤a<a[k]&&b==b[k]a时:若a==a[j] a==a[j] (j<k) ( j ,则从第二堆取走b−b[j]b-b[j]个石子,转化为(a,b[j]) (a,b[j]) ;否则必有a==b[j](j<k)a==b[j] (j ,则从第二堆取走b−a[j]b-a[j]个石子,转化为(a[j],a) (a[j],a)

代码

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>using namespace std;int a,b,aa;
double x;int main() {x=(1.0+sqrt(5.0))/2.0;while(2==scanf("%d%d",&a,&b)) {if(a>b) {swap(a,b);}aa=floor((b-a)*x);//计算第b-a个奇异局势printf("%d\n",a==aa?0:1);}return 0;
}

POJ-1067 取石子游戏(威佐夫博弈)相关推荐

  1. 洛谷P2252 取石子游戏(威佐夫博弈)

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

  2. HDU - 1527 取石子游戏(威佐夫博弈)

    题目链接:点击查看 题目大意:有两堆石子,两个人轮流取,每次可以取一堆中任意多的石子,或者取两堆中数量相同的石子,先将石子取完者获胜,若先手获胜输出1,后手获胜输出0 题目分析:这个题目涉及到了威佐夫 ...

  3. poj 1067 取石子游戏(博弈+威佐夫博奕(Wythoff Game))

    取石子游戏 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 29959   Accepted: 9818 Descriptio ...

  4. POJ 1067 取石子游戏

    取石子游戏 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 40917   Accepted: 13826 Descripti ...

  5. 威佐夫博弈:百练OJ:1067:取石子游戏

    威佐夫博弈(Wythoff's game):有两堆各若干个物品,两个人轮流从任一堆取至少一个或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜. 百练OJ:1067:取石子游戏 ...

  6. 【POJ】1067 取石子游戏(博弈论)

    Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后 ...

  7. 取两堆石子(威佐夫博弈)

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

  8. 1067:取石子游戏

    数学 威佐夫博奕 几个概念:奇异局势,黄金分割比例 黄金分割比例判断是不是非奇异局势,公式 ak =[k(1+√5)/2],bk= ak + k 如果两个人都采用正确操作,则面对非奇异局势,先拿者必胜 ...

  9. 【HDU - 2516 】取石子游戏 (Fibonacci博弈)

    题干: 1堆石子有n个,两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍.取完者胜.先取者负输出"Second win".先取者胜 ...

  10. POJ1067 HDU1527 取石子游戏【博弈】

    取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

最新文章

  1. 信息技术守护人类文明DNA
  2. xp系统的无线配置服务器,xp系统下使用无线提示无线自动配置服务没有运行如何解决...
  3. python3.6安装pygame-Pygame 框架安装教程(Python3.6为例)
  4. elasticsearch中文分词器ik-analyzer安装
  5. SAP UI5中的同步请求和异步请求
  6. java版本lstm_LSTM java 实现
  7. 再谈Jquery Ajax方法传递到action
  8. pythonloop是什么意思_python loop 英文问题
  9. oracle初始化化表空间用户权限
  10. rails 开发随手记 9
  11. hashcat字典攻击
  12. Auto CAD标注形位公差的方法
  13. 禁用win10触摸屏手势_笔记本WIN10系统启用或关闭触控板的多指(多点)触控功能步骤...
  14. 对梯度概念的直观理解
  15. dvwa页面打不开的原因_细看网页打不开的解决办法以及原因细看
  16. 记录:seekbar进度条宽度和滑块高度一致问题
  17. mac 装java ecli_Eclipse下Maven安装和配置
  18. 电站计算机培训计划,电站年度培训的工作总结范文
  19. 代码覆盖度-代码覆盖度概念以及度量方法
  20. vue 控制某个元素的显示或者隐藏之v-if属性

热门文章

  1. python机器学习手写字体识别,机器学习之路: python 支持向量机 LinearSVC 手写字体识别...
  2. H264格式说明及解析
  3. XLINUX-FPGA开发-基础篇-数电-门电路
  4. 关于win10安装CPC专利软件以及win10安装office2003
  5. 谷歌地图 街景 api_Google使街景在地图中更加突出
  6. 中国地图json 文件下载
  7. 测井曲线wis文件格式转换为ASCII文本格式小软件的开发(C与Python结合开发)
  8. word转pdf免费网站
  9. Android HttpClient Session保持
  10. 数字逻辑复习总结(超全!内含例题!)