POJ 2348 Euclid's Game 组合游戏
来源:互联网 发布:java的execute 编辑:程序博客网 时间:2024/06/05 17:16
题目大意:有两个人玩游戏,有两堆石子,每次一个人要从其中一堆石子中拿走一些石子,当出现有一对石子变成0的时候这个人就输了,另一个人就赢了。给出初始石子有多少,问谁能赢。
思路:基础的组合游戏的判定问题,这个题没有给数据范围,非常的坑爹,据说需要long long。
第一次做组合游戏的题目,想想还有些小激动呢。昨天听同学讲了讲,我来现学现卖一下:
由于组合游戏的公平性,那么:如果一个状态的子状态会使先手必败,那么当前状态的先手必胜;
如果不存在一个子状态会使先手必败,那么当前状态先手必败。
利用这个性质就可以来进行搜索了。
当然不能从小到大搜索,因为小的数据容易出解,所以要从小的开始枚举搜索。之后讨论一下边界条件。
CODE:
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;long long a,b;bool Judge(int a,int b){if(a < b)swap(a,b);if(!b)return false;int end = a / b;for(int i = end; i >= 1; --i)if(!Judge(a - i * b,b))return true;return false;}int main(){long long x,y;while(scanf("%lld%lld",&x,&y),x + y)printf("%s\n",Judge(x,y) ? "Stan wins":"Ollie wins");}
0 0
- POJ 2348 Euclid's Game 组合游戏
- POJ 2348 Euclid's Game( 总结规律+组合博弈 )
- poj 2348 Euclid's Game
- POJ-2348-Euclid's Game
- poj 2348 Euclid's Game
- poj 2348 Euclid's Game
- POJ 2348 Euclid's Game
- POJ - 2348 Euclid's Game
- POJ 2348 Euclid's Game
- POJ 2348 Euclid's Game
- poj 2348 Euclid's Game
- POJ 2348 Euclid's Game
- POJ 2348 Euclid's Game
- POJ 2348 Euclid's Game
- zoj 1913 || poj 2348 Euclid's Game
- POj-2348-Euclid's Game-博弈
- POJ 2348 Euclid's Game(博弈)
- POJ 2348-Euclid's Game(博弈论)
- 脚本练习_检查用户属组
- 设计模式
- Apache日志格式及获取客户端IP
- Oracle VM VirtualBox 导入vdi
- 代码
- POJ 2348 Euclid's Game 组合游戏
- MySql常用命令总结
- 推荐专著一本:《基于MATLAB/Simulink和BeagleBoard的快速原型机开发》
- dll搜索路径顺序问题
- svn cleanup死循环
- ios之编码规范详细说明
- Activator.CreateInstance(T) 方法
- 陈庆-CIO的视野决定企业IT的地位
- Linux C 多线程编程 -- 互斥锁与条件变量