题意:
初始数为1,两个人博弈,轮流那2~9的数乘上当前数,如果乘完以后大于等于n,则获胜。
思路:
从n开始往前找必胜点和必败点。(基础理论:http://blog.csdn.net/lgdblue/article/details/15809893
标记n为必败点(因为当你处于n且需要抉择时,你已经输了,坑的是,n等于1时,n是必胜点,因为题目从1开始抉择)
交替寻找必胜点和必败点直到找到小于等于1的点。
代码:
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
int main()
{
ll n;
while(~scanf("%lld",&n))
{
int flag = 1;
if(n==1)
printf("Stan wins.\n");
else
{
while(n>1)
{
if(flag==1)
{
n = (n-1)/9+1;
flag = 0;
}
else
{
n = (n-1)/2+1;
flag = 1;
}
}
if(flag==0)
printf("Stan wins.\n");
else
printf("Ollie wins.\n");
}
}
return 0;
}