http://acm.hdu.edu.cn/showproblem.php?pid=1517
//题意是两个人轮流乘以2-9之间的数,然后给定一个数求谁先达到或者超过这个数。
2-9 stan wins 因为stan先手。
10-18 Ollie wins (2*9) 因为不管stan 开始乘以几,都不可能超过10,
19-162 stan wins (9*2*9)
163-324 Ollie wins (2*9*2*9)
这个范围是这样确定的,给定一个数,如果先手要赢,必须每次乘以最大的,就是乘以9,后手不让他赢,所以每次乘以2 ,反之也是这样。
然后找出规律,可以发现必胜态是对称的,即不断除以18 看余数是否小于等于9 是则stan wins 否则是Ollie wins。
#include<cstdio>
int main()
{
double n;
while(scanf("%lf",&n)!=EOF)
{
while(n>18) n/=18;
if(n<=9) printf("Stan wins.\n");
else printf("Ollie wins.\n");
}
return 0;
}