威佐夫博弈
Posted lmix
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了威佐夫博弈相关的知识,希望对你有一定的参考价值。
有两堆各若干个物品,两个人轮流从任意一堆中取出至少一个或者同时从两堆中取出同样多的物品,规定每次至少取一个,至多不限,最后取光者胜利。
我们用(ai,bi)表示当前局势,当前局势为以下情况者(证明略),先手必输:
(0,0)
(1,2)
(3,5)
(4,7)
(6,10)
(8,13)
(9,15)
(11,18)
……
(an,bn)
结论:
an=未在前面出现过的最小的自然数=(int)((bn-an)*1.618)。
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("Second"); else printf("First"); return 0; }
以上是关于威佐夫博弈的主要内容,如果未能解决你的问题,请参考以下文章