题
意
:
给
一
个
正
整
数
n
(
1
<
n
<
4294967295
)
,
p
=
1
,
S
和
O
游
戏
,
两
人
轮
流
对
p
乘
以
2
?
9
之
间
的
一
个
数
,
首
先
使
p
>
=
n
的
人
获
胜
,
每
次
游
戏
都
从
S
开
始
题意:给一个正整数n(1 < n < 4294967295),p=1,S和O游戏,两人轮流对p乘以2-9之间的一个数,首先使p>=n的人获胜,每次游戏都从S开始
题意:给一个正整数n(1<n<4294967295),p=1,S和O游戏,两人轮流对p乘以2?9之间的一个数,首先使p>=n的人获胜,每次游戏都从S开始
分
析
:
与
其
说
博
弈
,
不
如
说
是
规
律
。
分析:与其说博弈,不如说是规律。
分析:与其说博弈,不如说是规律。
这
个
题
看
着
有
点
像
N
i
m
博
弈
,
想
着
和
9
的
倍
数
?
还
是
别
的
?
这个题看着有点像Nim博弈,想着和9的倍数? 还是别的?
这个题看着有点像Nim博弈,想着和9的倍数?还是别的?
写
了
一
个
,
发
现
不
对
写了一个,发现不对
写了一个,发现不对
然
后
根
据
题
意
列
几
个
出
来
然后根据题意列几个出来
然后根据题意列几个出来
S
胜
:
2
?
9
(
0
+
2
)
—
—
9
S胜:2-9 (0+2)——9
S胜:2?9(0+2)——9
O
胜
:
10
?
18
(
9
+
1
)
—
—
9
?
2
O胜:10-18 (9+1)——9*2
O胜:10?18(9+1)——9?2
S
胜
:
19
?
162
(
2
?
9
+
1
)
—
—
9
?
2
?
9
S胜:19-162 (2*9+1)——9*2*9
S胜:19?162(2?9+1)——9?2?9
O
胜
:
163
?
324
(
9
?
2
?
9
+
1
)
—
—
9
?
2
?
9
?
2
O胜:163-324 (9*2*9+1)——9*2*9*2
O胜:163?324(9?2?9+1)——9?2?9?2
S
胜
:
324
?
2916
(
9
?
2
?
9
?
2
+
1
)
—
—
9
?
2
?
9
?
2
?
9
S胜:324-2916 (9*2*9*2+1)——9*2*9*2*9
S胜:324?2916(9?2?9?2+1)——9?2?9?2?9
如
果
我
方
首
先
给
出
了
一
个
在
N
不
断
除
1
8
后
的
得
到
不
足
1
8
的
数
M
,
如果我方首先给出了一个在N不断除18后的得到不足18的数M,
如果我方首先给出了一个在N不断除18后的得到不足18的数M,
我
方
就
可
以
取
得
胜
利
,
然
而
双
方
都
很
聪
明
,
所
以
这
样
胜
负
就
决
定
于
N
,
我方就可以取得胜利,然而双方都很聪明,所以这样胜负就决定于N,
我方就可以取得胜利,然而双方都很聪明,所以这样胜负就决定于N,
如
果
N
不
断
除
1
8
后
的
得
到
不
足
1
8
的
数
M
,
如果N不断除18后的得到不足18的数M,
如果N不断除18后的得到不足18的数M,
如
果
1
<
M
<
=
9
则
先
手
胜
利
,
如果1<M<=9则先手胜利,
如果1<M<=9则先手胜利,
如
果
9
<
M
<
=
1
8
则
后
手
胜
利
。
如果9<M<=18 则后手胜利。
如果9<M<=18则后手胜利。
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
double n;
while(scanf("%lf",&n)!=EOF)
{
while(n>18) n/=18;
if(n<=9) puts("Stan wins.");
else puts("Ollie wins.");
}
return 0;
}
|