1. 程式人生 > >威佐夫博弈 hdu1527 取石子游戲

威佐夫博弈 hdu1527 取石子游戲

題意:輪流取石子。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;
}