题目链接:uva 847 - A Multiplication Game
题目大意:给定n,有p=1,每次操作可以给p乘上2~9,两个人人轮流操作,当p>=n时获胜。
解题思路:算半个贪心吧,2~9为必胜,10~18为必败,19~162为必胜。。。即每次乘9,如果大于则是Stan胜,再乘2,如果大于则是Oliie
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
bool judge (ll n) {
ll p = 1;
while (p < n) {
p *= 9;
if (p >= n)
return true;
p *= 2;
if (p >= n)
return false;
}
return false;
}
int main () {
ll n;
while (scanf("%lld", &n) == 1) {
printf("%s wins.\n", judge(n) ? "Stan" : "Ollie");
}
return 0;
}