巴什博弈

题目描述:

杰洛特在面对敌将时,总是需要获得更多的资源才能战胜敌人,很可惜,敌人也是这么想的。
因此他们共同来到一个城市买物资(两位都有无限的钱)
本城市中一共有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;
}

posted @ 2020-07-21 19:26  予之路  阅读(299)  评论(0编辑  收藏  举报