[poj2505]A multiplication game_博弈论

A mutiplication game poj-2505

题目大意:给定一个数n和p,两个选手每次可以将p乘上[2,9]。最先使得p大于n的选手胜利。

注释:$1\le n\le 4294967295$,$p=1$。


想法

这个题比较新颖,我们可以直接推出必败态区间。

最后,附上丑陋的代码... ...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
	int n;
	while(cin>>n)
	{
		bool count=false;
		while(n>9||count==true)
		{
			if(count%2==0)
				n=(n%9!=0)?n/9+1:n/9;
			else
				n=(n%2!=0)?n/2+1:n/2;
			count=!count;
		}
		if(n!=1)
			cout<<"Stan wins."<<endl;
		else
			cout<<"Ollie wins."<<endl;
	}
}

小结:好题。

猜你喜欢

转载自www.cnblogs.com/ShuraK/p/9615007.html