威佐夫博弈 hdu1527 取石子游戲
阿新 • • 發佈:2019-01-01
題意:輪流取石子。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; }