题意:从1开始轮流操作,操作mul from 2 to 9 >=n 时无法操作,则输
一个state 后继有一个为必败态时,该state为必胜态
n<=2^32 递推TLE
明显n为必败 则[n/9,n)都为必胜态
x=n/9 [x/2,x) x/2~x都为必败态 因为[x/2,x)不管mul什么都会进入必胜态的区间(该区间的任意一个数的使用后继都为必胜态)
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
typedef long long ll;
const ll inf=1e13;
int main()
{
ll n;
while(cin>>n)
{
ll l=n,r=inf;
bool flag=false;//必败态区间
while(l>1)
{
//cout<<l<<" "<<r<<endl;
if(flag==false)
{
flag=true;//必胜态
r=l-1;
l=(l+8)/9;// +8上取整
}
else
{
flag=false;
r=l-1;
l=(l+1)/2;//ceil
}
}
//stan 先手
if(flag)
puts("Stan wins.");
else
puts("Ollie wins.");
}
return 0;
}