hdu 1846

巴什博弈(Bash Game)

问题:只有一堆n个物品,有两个人轮流分别对这对物品取物,规定每次至少取一个,至多取走m个,最后取光的胜,假设双方都使用最优的策略

分析:

如果有n = m + 1,那么无论怎么去先取着必输,因为先取着至多可以取m个,剩下的后取着可以一次性取完。如果n = (m+1) * r + s,其中 r 为任意自然数,s <= m;那么先取着第一次可以取s个, 然后后取着取走k(k <= m)个,那么先取着再取走(m + 1) - k 个,此时剩下(m+1) * (r-1)个,让后取着一直面对这个状态,那么先取着必胜!

因此:如果有 n % (m+1) == 0, 那么先取着必输,n % (m+1) != 0 那么先取着必胜!


#include <iostream>


using namespace std;

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


你可能感兴趣的:(博弈)