取石子游戏 HDU 1527 博弈论 威佐夫博弈

题意

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

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

输出对应也有若干行,每行包含一个数字1或0,如果最后你是胜者,则为1,反之,则为0。

解题思路

这个题是赫赫有名的威佐夫博弈,当时做题想了一个多小时,好几次以为自己想起来了,但是每次都WA。看了题解才知道,这个竟然要和黄金分割搞在一起,太神奇了。

详细的解释参见博客博弈论之威佐夫博弈

代码实现

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int main()
{
double k=(sqrt(5.0)+1)/2;//求黄金分割的公式,都说精度很高。
int a, b, c;
while(scanf("%d%d", &a, &b)!=EOF)
{
if(a>b) swap(a, b);
c= b-a;
c=int(c*k);
if(c == a)
printf("0\n");
else printf("1\n");
}
return 0;
}

最新文章

  1. 自己解决虚拟机Ubuntu开机黑屏
  2. TCP connect的错误返回值
  3. TPS04-J. 使用线程池时确保ThreadLocal变量每次都初始化
  4. Redis配置集群一(window)
  5. 关于setInterval和setTImeout中的this指向问题
  6. TCP的那些事儿(下)
  7. ASP.NET Web.Config 读写辅助类
  8. c# SendMail
  9. PAT (Basic Level) Practise:1021. 个位数统计
  10. 《OD学HBase》20160821
  11. UVALive 7464 Robots (贪心)
  12. VC下Debug和Release区别
  13. linux 远程自动登录脚本 (注test.exp)
  14. 团队项目汇总beta
  15. BaseServer的介绍
  16. CSS3_盒阴影_倒影_盒子大小可调
  17. Exception in thread &quot;main&quot; java.lang.NoSuchMethodError: scala.Predef$.refArrayOps([Ljava/lang/Object;)Lscala/collection/mutable/ArrayOps;
  18. spring boot 与 thymeleaf (3): 设置属性、条件、遍历、局部变量、优先级、内联语法
  19. _mysql.c:29:20: error: Python.h: No such file or directory
  20. [原]IOS 设备基本信息

热门文章

  1. vue2.0关于添加属性后视图不能更新的问题
  2. css---一个大div中套左右两个div,如何让最高的把最低的撑开?且把父级撑开呢?
  3. js dom 添加类
  4. strcat()与strcpy()用法
  5. hdu 1754 线段树 水题 单点更新 区间查询
  6. sublime Text3中文字体错位问题解决办法
  7. ali之mtl平台学习
  8. Linux下用jar命令更新jar包文件
  9. 十五、RF操作时间控件
  10. 4、Shiro之IniRealm以及用户登录认证,角色认证,权限认证