威佐夫博弈
发布时间:2020-12-14 04:33:55 所属栏目:大数据 来源:网络整理
导读:有两堆各若干个物品,两个人轮流从任意一堆中取出至少一个或者同时从两堆中取出同样多的物品,规定每次至少取一个,至多不限,最后取光者胜利。 ? 我们用(a i ,b i )表示当前局势,当前局势为以下情况者(证明略),先手必输: (0,0) (1,2) (3,5) (
有两堆各若干个物品,两个人轮流从任意一堆中取出至少一个或者同时从两堆中取出同样多的物品,规定每次至少取一个,至多不限,最后取光者胜利。 ? 我们用(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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |