1067 取石子游戲【威佐夫博弈】
阿新 • • 發佈:2018-12-31
威佐夫博奕
簡述
威佐夫博弈(Wythoff Game):有兩堆各若干個物品,兩個人輪流從某一堆或同時從兩堆中取同樣多的物品,規定每次至少取一個,多者不限,最後取光者得勝。分析
我們用(ak,bk) (ak<=bk,k=0,1,2,~,n) 表示兩堆物品的數量並稱其為局勢,如果甲面對(0,0) ,那麼甲已經輸了,這種局勢我們稱為奇異局勢。前幾個奇異局勢是:(0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)、(9,15)、(11,18)、(12,20)。可以看出:a0=b0=0,ak 是未在前面出現過的最小自然數,而bk=ak+k。必勝態必敗態
滿足 ak=k*(1+√5) /2,bk=ak+k,後手必勝,否則先手必勝。
例題:
程式碼:
#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; int main() { int a,b; while(scanf("%d%d",&a,&b)!=EOF) { int bb=max(a,b); int aa=min(a,b); int k=bb-aa; int temp=(k*(1+sqrt(5))/2); if(aa==temp) printf("0\n"); else printf("1\n"); } return 0; }