hdu 1846 有趣,有趣

博弈问题除了有趣之外,我也想不到有什么可以形容了,知识有用之余,又可以骗下那些无知的小朋友(奸笑ing…………)


这个又是经典的说,叫做巴什博弈,英文叫Bash Game。嗯嗯,大概又是一个叫Bash的人想到的

所谓的Bash Game就是说:在只有一堆n个的物品,两人轮流从中取物品,每次至少取一个,至多取m个,最后是谁取光物品谁就是胜利者。

        先假设,n = m+1.很明显无论当前玩家从中取多少物品,都无法否认他将要输的命运,这是一个必败点。我们的目的总是为了导致必败点,

假设 m+1 < n < 2(m+1),那么当前玩家只要从中取(n-(m+1))就可以导致必败点(m+1);又假设2(m+1) < n < 3(m+1),当前玩家只要从堆中取出

(n-2(m+1))的物品,堆中剩下2(m+1)的物品,无论对手接下来取多少物品(1 <= x <= m),剩下的物品数s,m+1 < s < 2(m+1),我们又可以取走相应数

量的物品使堆中剩下m+1 个物品,所以2(m+1)也是一个必败点;如此类推堆中物品数 S = k(m+1)(k = 1,2,3……)为必败点。

            最后得出在这个游戏中:

                            1.如果m >= n,先手者必胜

                             2.如果n = k(m+1)+x (k = 1,2,3……;x <= m),先手者胜

                             3.如果n = k(m+1),后手者胜

然后…………………………你懂的


#include<iostream>

using namespace std;

int main()
{
	int cCase;
	cin >>cCase;
	while(cCase--){
		int n,m;
		bool flag = true;
		cin >>n >>m;
		if(m >= n)
			flag = true;
		else if(n%(m+1))
			flag = true;
		else
			flag = false;
		if(flag)
			cout <<"first" <<endl;
		else
			cout <<"second" <<endl;
	}
	return 0;
}


你可能感兴趣的:(游戏,bash)