HDU 1527 、POJ 1067 取石子游戏(威佐夫博奕)
来源:互联网 发布:矩阵陈发 编辑:程序博客网 时间:2024/05/18 00:36
取石子游戏Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 39727 Accepted: 13374Description有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。Input输入包含若干行,表示若干种石子的初始情况,其中每一行包含两个非负整数a和b,表示两堆石子的数目,a和b都不大于1,000,000,000。Output输出对应也有若干行,每行包含一个数字1或0,如果最后你是胜者,则为1,反之,则为0。Sample Input2 18 44 7Sample Output010SourceNOI
思路:最基本威佐夫博弈
威佐夫博弈(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。
两个人如果都采用正确操作,那么面对非奇异局势,先拿者必胜;反之,则后拿者取胜。
那么任给一个局势(a,b),怎样判断它是不是奇异局势呢?我们有如下公式:
ak =[k(1+√5)/2],bk= ak + k (k=0,1,2,…n 方括号表示取整函数)
#include<iostream>#include<cmath>#include<algorithm>using namespace std;int main(){ int a,b; while(cin>>a>>b){ int k=abs(a-b); int t=min(a,b);//a[k]<b[k] if( int(k*(sqrt(5.0)+1)/2)==t ) cout<<"0"<<endl; else cout<<"1"<<endl; }}
0 0
- HDU 1527 、POJ 1067 取石子游戏(威佐夫博奕)
- POJ 1067 HDU 1527 取石子游戏(威佐夫博奕)
- poj 1067&&hdu 1527 取石子游戏
- POJ 1067 && HDU 1527 取石子游戏(博弈论)
- POJ-1067 取石子游戏(威佐夫博奕)
- POJ - 1067 - 取石子游戏 (威佐夫博奕)
- [威佐夫博弈 黄金分割比 数学技巧] POJ 1067 取石子游戏 & HDU 1527 取石子游戏
- HDU 1527 取石子游戏(威佐夫博奕)
- poj 1067和 hdu 1527 取石子游戏
- HDU 1527 (POJ 1067) 取石子游戏 Wythoff Game
- POJ 1067 取石子游戏 威佐夫博奕
- POJ 1067 取石子游戏(威佐夫博奕)
- POJ 1067-取石子游戏(威佐夫博奕)
- POJ 1067 取石子游戏 (博弈)
- POJ 1067(取石子游戏)
- HDU 1527 取石子游戏 威佐夫博奕
- hdu 1527 取石子游戏 (威佐夫博奕)
- HDU 1527 取石子游戏 (博弈)
- C# asp.net 搭建微信公众平台(可实现关注消息与消息自动回复)的代码以及我所遇到的问题
- extern “C"和#ifdef __cplusplus
- 20160804 最长链 树分治?树DP?
- 10.get&load、list&iterate区别
- 左右的研究
- HDU 1527 、POJ 1067 取石子游戏(威佐夫博奕)
- Java与C++的区别
- 开始学习C语言
- Android studio 代码混淆和破解apk
- Android TextView文字均匀分布
- ReviewBoard the file XXX(revision XXX) not found in the repository
- POJ3684-Physics Experiment
- 二叉树叶子个数
- UUID介绍, Python使用UUID库