题目: 基础博弈题
Stan and Ollie play the game of multiplication by multiplying an integer p by one of the numbers 2 to 9. Stan always starts with p = 1, does his multiplication, then Ollie multiplies the number, then Stan and so on. Before a game starts, they draw an integer 1 < n < 4294967295 and the winner is who first reaches p >= n.
分析:入门题,需要理解必胜点和必败点,即必败点的所有后继均为必胜点,必胜点一定存在一个必败的后继点。
举个例子解释: n=324
[36 , 323] 是必胜点,因为乘以9后一定>=324;
[18 , 35]是必败点,因为他的后继一定位于[36 , 323];
同理 [2 , 17]必胜
[1 , 1]必败。
容易发现规律: 区间的下限总是后继区间下限除以2或9(向上取整)
代码:
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
long long n,a[2]={9,2};
while(~scanf("%I64d",&n))
{
int t=0;
while(n>1) n=ceil((double)n/a[t]),t^=1;
if(t) puts("Stan wins.");
else puts("Ollie wins.");
}
return 0;
}