威佐夫博弈 hdu1527 取石子游戏

来源:互联网 发布:12306网络购票暂停 编辑:程序博客网 时间:2024/05/29 03:22

传送门:点击打开链接

题意:轮流取石子。1.在一堆中取任意个数.2.在两堆中取相同个数。最后取完的人胜利,问先手是否必赢

思路:威佐夫博弈博弈,满足黄金分割,且每个数字只会出现一次。具体求法见代码

#include<map>#include<set>#include<cmath>#include<ctime>#include<stack>#include<queue>#include<cstdio>#include<cctype>#include<string>#include<vector>#include<cstring>#include<iostream>#include<algorithm>#include<functional>#define fuck(x) cout<<"["<<x<<"]"#define FIN freopen("input.txt","r",stdin)#define FOUT freopen("output.txt","w+",stdout)using namespace std;typedef long long LL;int main() {    int a, b; //FIN;    while(~scanf("%d%d", &a, &b)) {        if(a >= b) swap(a, b);        int k = b - a;        int x = (sqrt(5.0) + 1) / 2 * k, y = x + k;        if(a == x && b == y) printf("0\n");        else printf("1\n");    }    return 0;}


0 0
原创粉丝点击