题目大意:初始数为1,stan先手,每次将数乘以2~9,先将数≥n者胜。
题解:倒推,n为P状态,n-1~n/9为N状态,n/9-1~n/9/2为P状态……一直不停除以9,除以2,状态交替,要特殊处理当前数是2或9的倍数的情况,除以2或9会有差异。
代码:
#include<cstdio>
int main()
{
long long n,x;
bool flag;
while(~scanf("%I64d",&n))
{
x=n-1;
flag=1;
while(x>=1ll)
{
if(flag)
{
x++;
if(x%9ll)x/=9ll;
else x=x/9ll-1ll;
}
else
{
x/=2ll;
}
flag^=1;
}
if(flag)
printf("Ollie wins.\n");
else
printf("Stan wins.\n");
}
return 0;
}