找到Stan的必败状态,[10,18],[163,324]……[9^n*2^(n-1)+1,9^n*2^n]。。
从1开始,无论stan怎么操作,ollie将格局变为平衡状态[9^1*2^0+1,9^1*2^1]([10,18])以后无论stan怎么走,ollie都降格局变为平衡状态[9^n*2^(n-1)+1,9^n*2^n];然而stan遇到平衡状态唯一能做的是打破平衡状态,所以若n在某个平衡状态里,Ollie必赢;否则stan赢。
题意:Stan从1开始,可以乘上2~9中任何一个数,Ollie也如此操作,只到某个人本回合的操作超过N为之。。1<N<2^32-1
找到Stan的必败状态,[10,18],[163,324]……[9^n*2^(n-1)+1,9^n*2^n]。。
从1开始,无论stan怎么操作,ollie将格局变为平衡状态[9^1*2^0+1,9^1*2^1]([10,18])以后无论stan怎么走,ollie都降格局变为平衡状态[9^n*2^(n-1)+1,9^n*2^n];然而stan遇到平衡状态唯一能做的是打破平衡状态,所以若n在某个平衡状态里,Ollie必赢;否则stan赢。
#include<algorithm>
#include<iostream>
#include<string>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
bool count=false;
while(n>9||count==true)//当n<=9且当前状态为必败态时退出循环
{
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;
}
}