巴什博弈
题目描述:
杰洛特在面对敌将时,总是需要获得更多的资源才能战胜敌人,很可惜,敌人也是这么想的。
因此他们共同来到一个城市买物资(两位都有无限的钱)
本城市中一共有n个物资,
他们俩轮流进行购买(由杰洛特先买)
每一次购买可以买 1……m 个物资
最先刚好购买光商品的人可以获胜
输入:
多组数据输入
每行一个n和m。
0 < m <= n <= 100000
输出:
如果是杰洛特胜利则输出"Gerlot",如果是狂猎胜利则输出"Wildhunte" (没有双引号)
样例输入:
23 2
4 3
样例输出:
Gerlot
Wildhunte
巴什博弈:
两个顶尖聪明的人在玩游戏,有一堆n个石子,每次每个人能取[1,m]个石子,不能拿的人输,请问先手与后手谁必败?
我们分类讨论一下这个问题:
当n≤m时,这时先手的人可以一次取走所有的;
当n=m+1时,这时先手无论取走多少个,后手的人都能取走剩下所有的;
当n=k∗(m+1)时,对于每m+1个石子,先手取i个,后手一定能将剩下的(m+1−i)个都取走,因此后手必胜;
当n=k∗(m+1)+x(0<x<m+1)时,先手可以先取x个,之后的局势就回到了上一种情况,无论后手取多少个,先手都能取走m+1个中剩下的,因此先手必胜。
结论:
通过上面的分析可以得出结论:当n能整除m+1时先手必败,否则先手必胜。
#include <stdio.h>
int main()
{
int n, m;
while (scanf("%d%d", &n, &m) != EOF)
if (n % (m + 1))
printf("Gerlot\n");
else
printf("Wildhunte\n");
return 0;
}