poj1067 取石子游戏
来源:互联网 发布:甘肃启航网络待遇 编辑:程序博客网 时间:2024/06/04 08:51
F - 取石子游戏
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64uDescription
有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。
Input
输入包含若干行,表示若干种石子的初始情况,其中每一行包含两个非负整数a和b,表示两堆石子的数目,a和b都不大于1,000,000,000。
Output
输出对应也有若干行,每行包含一个数字1或0,如果最后你是胜者,则为1,反之,则为0。
Sample Input
2 18 44 7
Sample Output
010
思路,从最基本的情况开始找规律;s表示成功,f表示失败;令a<=b;以下为 “我” 面临的状态,若能令次态为 f , 则 “我” 胜利
0 0 f 1 1 s 2 2 s 3 3 s
0 1 s 1 2 f 2 3 s 3 4 s
0 2 s 1 3 s 2 4 s 3 5 f
0 3 s 1 4 s 2 5 s 3 6 s
0 4 s 1 5 s 2 6 s 3 7 s
可总结出规律,失败的状态为 0 0;1 2;3 5;4 7;6 10;8 13;9 15;每一组数据出现的第一个元素为以前没出现自然数中的最小值。
总结出了规律,可未找到表达式TT,网上查了查才知道,原来用到了黄金分割。。。真是神奇。
a:1,3,4,6,8,9,11,12,。。。;
a[k] = floor( ( sqrt(5)+1 ) / 2 * k );b[k]=a[k]+k;
用 a 是否等于 floor( ( sqrt(5)+1 ) / 2 * (b-a) ) 来检验是否胜利
证明在这,没看懂啊,有时间在研究研究吧http://www.freopen.com/?p=10512
0 0
- POJ1067取石子游戏
- poj1067(取石子游戏)
- 取石子游戏POJ1067
- poj1067取石子游戏
- POJ1067----取石子游戏
- poj1067 取石子游戏
- poj1067取石子游戏
- poj1067 取石子游戏
- POJ1067 取石子游戏
- poj1067 取石子游戏
- POJ1067 取石子游戏
- 【poj1067】 取石子游戏
- poj1067/hdoj1527 取石子游戏
- poj1067取石子游戏(威佐夫博奕)
- [POJ1067] 取石子游戏 && 博弈
- POJ1067 取石子游戏(博弈论)
- poj1067 取石子游戏--威佐夫博奕
- 取石子游戏 poj1067 威佐夫博奕
- [转]GDBM学习笔记
- unity<二>基础
- Python之numpy教程(一):基础概念
- ACM--虫子爬井--模拟--HDOJ 1049--Climbing Worm--水
- python学习五
- poj1067 取石子游戏
- 【树分治】poj1741 tree
- single-number、single-number2,数组中只出现一次的数字
- js中继承的几种用法总结(apply,call,prototype)
- 开篇利市,谢谢这么多年的CSDN
- Leetcode 217. Contains Duplicate
- js和html的结合方式及js的变量声明和数据类型
- 搭建Apache Server +Tomcat 简单集群环境,实现session复制
- Mysql 数据备份与还原