POJ 2505 - A multiplication game (乘法博弈)

版权声明:欢迎转载 https://blog.csdn.net/l18339702017/article/details/82219363

A multiplication game

Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 6826   Accepted: 3422

Description

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.

Input

Each line of input contains one integer number n.

Output

For each line of input output one line either 
Stan wins. 
or 
Ollie wins. 
assuming that both of them play perfectly.

Sample Input

162
17
34012226

Sample Output

Stan wins.
Ollie wins.
Stan wins.

Source

Waterloo local 2001.09.22

遇事不决先打表:

[1,9]  [10,18]  [19,162]  [163,324]  [325,2916]

A        B           A            B               A

发现规律:每个区间的有界  r = 9^x * 2 ^y;

对每个n进行判断即可

#pragma GCC optimize(2)
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
#define clr(a) memset(a,0,sizeof(a))
#define rep(i,x,y) for(int i=x;i<y;i++)
#define REP(i,x,y) for(int i=x;i<=y;i++)
#define pre(i,x,y) for(int i=x;i>=y;i--)
#define line cout<<"-----------------"<<endl;

typedef long long ll;
const int maxn = 1e5+10;
const int MAXN = 1e6+10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9+7;
const int N = 1010;


int main(){
	ll n;
	while(scanf("%lld", &n) != EOF){
		ll flag = 0;
		ll ans = 1;
		while(ans < n){
			if(flag & 1) ans *= 2;
			else ans *= 9;
			flag ++;
		}
		if(flag & 1) puts("Stan wins.");
		else puts("Ollie wins.");
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/l18339702017/article/details/82219363