P1290 【欧几里德的游戏】
真·做题全凭感性
从题目中很容易看出
这是一道\(Gcd\)的题
同时又结合了一些略略的博弈论(丢下锅跑真爽
我们看,辗转相减的\(a,b\)一共只有两种情况
\(a-b<b,a>b\),就是\(a\)比\(b\)大,但是比$b \(的两倍小,这种情况时。我们的\)S\(和\)O$君就只能硬着头皮去舰减了。
\(a>2b\),就是a比b的二倍大。这时候我们的\(S\)和\(O\)君就需要ta们的大脑进行一波用命分析-1s,-1s。
PS:a b是变量
因为\(a>2b\),所以我们的\(S\)和\(O\)君就可以有两种选择
将a减成小于b,就是进行辗转相除的过程。
让位,就是在正常进行游戏的前提下,将现在的状态转移给对手(a>b or a < b)。
通过上面两种骚操作,他肯定就能赢了。
到此,我们就大体分析van了。
另外因为是\(S\)和\(O\)君都是极其聪明的(-1s,-1s,用命分析)
所以我们可以看做他们是已经知道自己做出选择后的结果的。
上代码
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
bool dfs(int a,int b,int who)
{
if(b==0)//van的游戏结束
return false;//当前人fail
if(a/b==1)//第一种情况,只能硬着头皮上
return !dfs(b,a-b,who^1);
if(a/b>1)
{
/*if(dfs(b,a%b,who^1))//如果我们将a变成小于b的情况,然后对手赢了,我们就可以改命
return true;//改命
else
return true;//如果对手输了,那是更好不过了
ps:我这里写的有些不大严谨233*/
return true;//上面的返回都是true
//至于为什么可以怎么写,一方面是我们利用上面的归纳法总结出来的233
//也可以这么想,拿到这种情况的人,是可以可以控制a,b的大小的。
//也就是控制了游戏局数,就像你买了一个5000~6000的挂,神仙一样,为所欲为。(逃
}
}
int main()
{
int k;
scanf("%d",&k);
int a,b;
while(k--)
{
scanf("%d%d",&a,&b);
if(a<b)
swap(a,b);//保证a>b
if(dfs(a,b,1))//简单的判断,第三个参数其实没有的,只是我调试用的。
printf("Stan wins\n");
else
printf("Ollie wins\n");
}
}
P1290 【欧几里德的游戏】的更多相关文章
- P1290 欧几里德的游戏
P1290 欧几里德的游戏 原本不想写的,但细节有些多qwq,还是放上吧. 假设a严格大于b 当a<b*2时,只有一种方法往下走:否则就可以有多种方法,并且一定至少有一种可以使自己必胜,因为可以 ...
- 洛谷——P1290 欧几里德的游戏
P1290 欧几里德的游戏 题目描述 欧几里德的两个后代Stan和Ollie正在玩一种数字游戏,这个游戏是他们的祖先欧几里德发明的.给定两个正整数M和N,从Stan开始,从其中较大的一个数,减去较小的 ...
- LUOGU P1290 欧几里德的游戏
题目描述 欧几里德的两个后代Stan和Ollie正在玩一种数字游戏,这个游戏是他们的祖先欧几里德发明的.给定两个正整数M和N,从Stan开始,从其中较大的一个数,减去较小的数的正整数倍,当然,得到的数 ...
- P1290 欧几里德的游戏(洛谷)
欧几里德的两个后代 Stan 和 Ollie 正在玩一种数字游戏,这个游戏是他们的祖先欧几里德发明的.给定两个正整数 M 和 N,从 Stan 开始,从其中较大的一个数,减去较小的数的正整数倍,当然, ...
- 洛谷P1290 欧几里德的游戏
题目:https://www.luogu.org/problemnew/show/P1290 只要出现n>=2*m,就可以每次把较大的数控制在较小的数的一倍与二倍之间,则控制了对方的走法: 每次 ...
- 题解 洛谷P1290 【欧几里德的游戏】
这题没必要那么麻烦,只需要推理一下即可: 假设我们有两个数\(x,y\),先把\(x\)设为较大值,\(y\)设为较小值.现在分成三种情况: \(1\).若两数为倍数关系,操作的一方赢. \(2\). ...
- 洛谷P1290欧几里德游戏
题目地址 题目大意: 两个人st和ol博弈 有两个整数n,m 每次轮到一个人时候,需要选择用大的那个数减去小的那个数的倍数(不能减为负数) 最后得到0的为胜利者 思路: (以下讨论均在n<m的条 ...
- luoguP1290 欧几里德的游戏 [博弈论]
题目描述 欧几里德的两个后代Stan和Ollie正在玩一种数字游戏,这个游戏是他们的祖先欧几里德发明的.给定两个正整数M和N,从Stan开始,从其中较大的一个数,减去较小的数的正整数倍,当然,得到的数 ...
- LG1290 欧几里德的游戏
https://www.luogu.com.cn/problem/P1290 博弈论游戏,用到mod. 辗转相除法的过程,会构成n种状态. 到达最后一个状态就赢了. 对于一次过程如果div>1那 ...
随机推荐
- hdfs shell命令及java客户端编写
一. hdfs shell命令 可以通过hadoop fs 查看所有的shell命令及其用法. 传文件到hdfs: hadoop fs -put /home/koushengrui/Downloads ...
- 分布式思想和rpc解决方案介绍
1.RPC的诞生 RPC(Remote Procedure Call)远程过程调用,通过这个rpc协议,调用远程计算机上的服务,就像调用本地的服务一样. 不同的服务部署在不同的机器上面,并且在启动后在 ...
- python Gensim库建立word2vec参数说明
from gensim.models import word2vec model = word2vec.Word2Vec(sentences, size=80, window=10,workers=6 ...
- rem布局,根据不用设备分辨率更改跟字体大小
(function(win,doc){ change(); function change(){ doc.documentElement.style.fontSize = doc.documentEl ...
- 利用Intent.ACTION_SEND进行分享
安卓系统本身可以很简便的实现分享功能,因为我们只需向startActivity传递一个ACTION_SEND的Intent,系统就为我们弹出一个应用程序列表.其实在系统的文件管理器中,这应该是我们常用 ...
- ab压测工具的一些个人见解
ab压测工具(linux版)由于网上教程一大把,今天也按照教程好好研究了一番,下面写一下对此工具的一些个人见解,如有不妥,希望一起探讨. 优点: 1.小巧. 2.理论支持655350并发数.实际3 ...
- Session [php]
1.启动会话 session_start() 通过session_register()函数创建会话 session_register()函数用来为会话登录一个变量来隐含地启动会话,但要求php.ini ...
- jq案例中遇到的知识点总结(会飞的小鸟和三级联动)
1.会飞的小鸟 ,按键盘的上下左右键,小鸟会上下左右的飞 知识点:1.keyCode 键盘按键对应的数字 比如 左上右下键 对应 37 38 39 40: 2.小鸟的位置:var bBird=$(&q ...
- asp.net 单元测试(转)
最早接触单元测试是看了极限编程相关资料里边讲的测试驱动开发,然后下载了Nunit研究了一下,但并没产生多大的触动,因为那个时候做的都是些时间紧任务重的事情,对于单元测试的直接感觉就是有可能比较费时间. ...
- ActiveMQ实例1--简单的发送和接收消息
一.环境准备 1,官网http://activemq.apache.org/下载最新版本的ActiveMQ,并解压 2,打开对应的目录,在Mac环境下,一般可以运行命令: cd /Users/***/ ...