题意:p开始为1,然后两个人轮流选择2~9与p相乘,所得的值赋给p,谁先使p>=n谁赢,Stan先。
题解:博弈+规律
2 - 9:9 先手胜
10 - 18:2 * 9 后手胜
19 - 162:9 * 2 * 9 先手胜
163 - 324:2 * 9 * 2 * 9 后手胜
我们只要把n不断的除以18,看最后剩下的,若≤9,先手为必胜态,反之后手必胜。
由于n不一定为18倍数,我们将n设为double。
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#include<fstream>
#include<set>
#include<map>
#include<sstream>
#include<iomanip>
#define ll long long
using namespace std;
double n;
int main() {
while (~scanf("%lf", &n)) {
while (n > 18) n /= 18;
if (n <= 9) puts("Stan wins.");
else puts("Ollie wins.");
}
return 0;
}