【博奕】A Multiplication Game

文章描述了一个新一和柯南之间的乘法游戏,双方轮流将数p乘以2到9之间的数,目标是首先达到或超过给定的数n。文章分析了必胜态和必败态的条件,并提供了一个判断策略,即通过不断将数除以18来确定获胜方。代码示例展示了如何判断n是否在必败态范围内,从而决定游戏结果。
摘要由CSDN通过智能技术生成

题目描述

新一和柯南在玩一个乘法游戏。简单地说,新一总是从p=1开始,将p乘以一个数字 r ( 2 < = r < = 9 ) r(2<=r<=9) r2<=r<=9,然后柯南继续乘以一个新的数字 r ( 2 < = r < = 9 ) r(2<=r<=9) r2<=r<=9
哪一方得到的乘积率先大于等于 n ( 1 < n < 4294967295 ) n(1 < n < 4294967295) n1<n<4294967295就获胜。

输入输出格式

输入格式:

输入多个样例,每个样例只有一行包含一个整数n。

输出格式:

对于每个样例,如果新一获胜,输出:“Stan wins.”;如果柯南获胜,输出“Ollie wins.”。
注意,作为名侦探新一和柯南都是足够聪明的。

输入输出样例

输入样例#1:

162
17
34012226

输出样例#1:

Stan wins.
Ollie wins.
Stan wins.

我们知道必胜态和必败态满足下面的关系:

必败态的后继都是必胜态。

必胜态的后继必存在必败态(注意是存在)

我们的目的就是看1到底是在必败态里面还是在必胜态里面,必胜态满足以下特征:

[ n / 9 / 2 / 9 / 2 / … … / 9 , n / 9 / 2 / 9 / 2 / … … / 9 / 2 ) , [ n / 9 / 2 / 9 / 2 /……/ 9, n / 9 / 2 / 9 / 2 /……/ 9 /2), [n/9/2/9/2/……/9,n/9/2/9/2/……/9/2)左区间以除 9 9 9结尾。我们不难发现左区间的值相当于 n n n一直除 18 18 18直到 n n n小于 18 18 18为止,这时候我们要判断 n n n 9 9 9的关系,若 n n n小于 9 9 9,则除以 9 9 9之后会包含 1 1 1,这时候 1 1 1为必胜态,反之为必败态。

所以我们只需要一直除以 18 18 18就行了

AC代码

#include<bits/stdc++.h>
using namespace std;
int a[100001],b[100001],sum,sum1;
double t;//注意是double
int main(){
	while(cin>>t){
		while(t>18){
			t/=18;
		}
		if(t>9){
			cout<<"Ollie wins."<<endl;
		}else{
			cout<<"Stan wins."<<endl;
		}
	}
	
	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值