威佐夫博弈是一類經典的博弈問題php
有兩堆石子,兩個頂尖聰明的人在玩遊戲,每次每一個人能夠從任意一堆石子中取任意多的石子或者從兩堆石子中取一樣多的石子,不能取得人輸,分析誰會得到勝利html
威佐夫博弈不一樣於Nim遊戲與巴什博奕,它的特殊之處在於不能將兩堆石子分開分析。spa
前輩們在對該博弈遊戲作了大量的探索以後最終找到了一些很是有意思的性質code
下面的內容不想看的能夠跳過直接看結論,其實也沒啥亂用233,這部分就是爲了拓寬視野的htm
定義先手必輸的局勢爲奇異局勢,前幾個奇異局勢爲\((0,0),(1,2),(3,5),(4,7),(6,10) \dots\)blog
假設\((x,y)\)爲第\(k\)個奇異局勢遊戲
性質:get
打表找規律it
感受網上證的都不靠譜,那隻好讓本蒟蒻親自下手嘍io
證實這個結論,咱們只須要證實兩點:(1)任意天然數都出現過(2)任意天然數僅出現一次
對於(1):反證法,設\(v\)這個數沒有出現過,那麼\(v\)能夠作一個新的奇異局勢的\(x\)
對於(2): 反證法
假設數\(v\)出現了兩次,那麼\(v\)必定不是所在奇異局勢的\(x\)(\(x\)必須以前未出現)
那麼\(v\)只能同時是兩個奇異局勢的\(y\),又由於任意一個奇異局勢的差值不相同,所以\(v\)不可能出現兩次
若取走一堆中的石子,那麼兩對石子的差值會改變,必將成爲非奇異局勢
若同時取走,由於同一個差值只會對應一種奇異局勢,必將成爲非奇異局勢
顯然
人們經過對上述性質的探索,同時結合Betty定理,給出了威佐夫博弈的重要結論
假設兩堆石子爲\((x,y)\)(其中\(x<y\))
那麼先手必敗,當且僅當
\((y-x)*\frac{(\sqrt{5}+1)}{2}=x\)
其中的\(\frac{(\sqrt{5}+1)}{2}\)實際就是\(1.618\),黃金分割數!怎麼樣,博弈論是否是很神奇?
證實的話,
首先你要會證實Betty定理,連接在上面,若是度孃的證實看不懂能夠看這裏
威佐夫博弈結論的話能夠看這裏
#include<cstdio> #include<algorithm> #include<cmath> #define int long long using namespace std; main() { int a,b; scanf("%lld%lld",&a,&b); if(a>b) swap(a,b); int temp=abs(a-b); int ans=temp*(1.0+sqrt(5.0))/2.0; if(ans==a) printf("0"); else printf("1"); return 0; }