PKU2505

/*
指定一个数 n

n ~ oo 是必败态

n/9 - n-1 必胜

n/18 ~ n/9 必败

n/(18*9)  ~ n/18-1必胜态

n/(18*18) ~ n/(18*9) 必败

对于这个题目,很明显的需要用到必胜态和必败态来判断。而且n很大,所以不可能用数组求,所以只能找规律
对于n及比n大的数是必败态
所有能够转到必败态的状态都是必胜态
所以n/9 ~ n-1就是必胜态了
所有全部到达必胜态的状态是必败态
所以n/18 ~ n/9 就是必败态,可以用一个区间来表示。这里需要注意边界,这里我没有考虑

*/

#include <cstdio>

int n,ans;

int main()
{
	while(scanf("%d",&n)==1)
	{
		int left = (n-1+9)/9, right = n-1;
		int pn = 1;

		do
		{	
			if( 1>=left && 1<=right) 
			{
				ans = pn;break;
			}
			pn = 1-pn;
			if(!pn)
			{
				right = left-1;
				left = (left-1+2)/2;
			}
			else
			{
				right = left-1;
				left = (left-1+9)/9;
			}
		}while(1);
		

		if( pn )
			printf("Stan wins.\n");
		else
			printf("Ollie wins.\n");
	}
	return 0;
}
posted @ 2011-06-16 14:08  AC2012  阅读(181)  评论(0编辑  收藏  举报