题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1517
题意:一个数p初始为1,每个人可以把P乘以2~~9,当操作完P>=n时,操作者获胜。
思路:当n在9m2m+1–9m+12m先手必胜,当n在9m+12m+1–9m+12m+1后手必胜
2-9时先手必胜,9
10-18时后手必胜。2* 9
19-162时先手必胜,9* 2* 9
163-324 时后手必胜,2* 9* 2*9。
如何理解呢:当n处以先手的必胜范围,先手会尽力扩大范围,乘以9,后手会尽力防止范围扩大,乘以2。反之是,先手乘以2,后手乘以9。所以有上面的规律。
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
long long n;
while(scanf("%lld",&n)!=EOF)
{
long long x=1;
//int ans=1;
int flag=1;
while(x<n)
{
if(flag)
{
x=x*9;
}
else
{
x=x*2;
}
flag^=1;
}
if(flag==0)
printf("Stan wins.\n");
else
printf("Ollie wins.\n");
}
return 0;
}