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那 ...
随机推荐
- spring整合jpa
有点类似SSH整合,O(∩_∩)O哈哈~ <?xml version="1.0" encoding="UTF-8"?> <beans xmln ...
- pat1053. Path of Equal Weight (30)
1053. Path of Equal Weight (30) 时间限制 10 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue G ...
- pat1093. Count PAT's (25)
1093. Count PAT's (25) 时间限制 120 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CAO, Peng The strin ...
- 我的2015plan
工作(熟悉业务流程,知道来龙去脉,提出改进优化,争取p6) 技术(读1个开源代码.多线程.网络编程) 技术类书籍(c++.python得深入) 读书(历史.经济.传记类) 状态(融入.投入.高效.平衡 ...
- Linux Shell 录制并回放终端会话
当别人演示某些命令时,一时可能记不住,解决办法之一是把演示时的过程录制下来,视频当然最完美但是成本高.利用script和scriptrelay命令可以录制命令的次序和时序. 录制 script -t ...
- HDU 4081—— Qin Shi Huang's National Road System——————【次小生成树、prim】
Qin Shi Huang's National Road System Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3 ...
- Java Executors小结
一 Executors提供了一系列工厂方法用于创先线程池ThreadPoolExecutor线程池的具体实现类,一般用的各种线程池都是基于这个类实现的 返回的线程池都实现了ExecutorServic ...
- Memcache安装、配置与学习
基于现在大多网站数据很多,由于页面性能问题我们都开始对站点使用缓存进行性能优化 Memcache扩展下载:http://windows.php.net/downloads/pecl/releases/ ...
- StringBuilder做函数参数
StringBuilder做函数参数: static void Main(string[] args) { StringBuilder sb = new StringBuilder(); Hello( ...
- 超链接导致window.location.href失效的解决办法
通常我们采用 window.location.href 执行页面间的跳转,比如下面的语句 window.location.href = 'https://www.baidu.com/'; 一般执行上面 ...