Luogu P1290 欧几里得的游戏/UVA10368 Euclid's Game
Luogu P1290 欧几里得的游戏/UVA10368 Euclid's Game
对于博弈论的题目没接触过多少,而这道又是比较经典的SG博弈,所以就只能自己来推关系……
假设我们有两个数$m,n$,我们先把$m$设为较大值,$n$设为较小值。现在我们把它分成三种情况:
1.若两数为倍数关系,当前操作的一方赢。
2.若$m \div n>1$,那么还是操作一方赢。
为什么呢?
拿$(25,7)$来举例。这时的操作方就有三种选择:$(8,7)$,$(11,7)$,$(4,7)$,
如果他选$(18,7)$,那后者就面对的是$(11,7)$或$(4,7)$;而如果他不选$(18,7)$,那么他面对的还是$(11,7)$或$(4,7)$。
此时我们会发现,$(11,7)$和$(4,7)$是必有一个能赢的,而两人都会选择最优策略,所以谁有选择权谁就能赢,也就是说他不能选$(18,7)$。
所以易知,谁有选择权谁就能赢。
3.商为$1$,则继续
举个例子,如$(6,4)$,这时先手没有选择权,那就只能继续,如$(2,4)$。
综上所述,那么代码也就很容易写了。
(两道题的读入略微有些不同)
Luogu P1290
#include<bits/stdc++.h>
using namespace std;
int c,m,n;
bool Judge(int m,int n) {
int p=0;
while(1) {
p++;
int mmax=max(m,n),mmin=min(m,n);
m=mmax;
n=mmin;
if(m%n==0||m/n>1) {
return p%2;
}
else {
m-=n;
}
}
}
int main()
{
scanf("%d",&c);
for(int i=1;i<=c;i++) {
scanf("%d%d",&m,&n);
if(Judge(m,n)==1) {
printf("Stan wins\n");
}
else {
printf("Ollie wins\n");
}
}
return 0;
}
UVA10368
#include<bits/stdc++.h>
using namespace std;
int c,m,n;
bool Judge(int m,int n) {
int p=0;
while(1) {
p++;
int mmax=max(m,n),mmin=min(m,n);
m=mmax;
n=mmin;
if(m%n==0||m/n>1) {
return p%2;
}
else {
m-=n;
}
}
}
int main()
{
while(scanf("%d%d",&m,&n)&&(m!=0&&n!=0)) {
if(Judge(m,n)==1) {
printf("Stan wins\n");
}
else {
printf("Ollie wins\n");
}
}
return 0;
}
Luogu P1290 欧几里得的游戏/UVA10368 Euclid's Game的更多相关文章
- 洛谷 [P1290] 欧几里得的游戏
SG函数的应用 看到这题就想到了SG函数 那么可以考虑最终情况:一个数是x,另一个是0,那么先手必败(因为上一个人已经得到0了,其实游戏已经结束了) 剩下的情况:一个数n, 一个数m,假设n>m ...
- 洛谷P1290 欧几里得的游戏
题目描述 欧几里德的两个后代Stan和Ollie正在玩一种数字游戏,这个游戏是他们的祖先欧几里德发明的.给定两个正整数M和N,从Stan开始,从其中较大的一个数,减去较小的数的正整数倍,当然,得到的数 ...
- AC日记——欧几里得的游戏 洛谷 P1290
题目描述 欧几里德的两个后代Stan和Ollie正在玩一种数字游戏,这个游戏是他们的祖先欧几里德发明的.给定两个正整数M和N,从Stan开始,从其中较大的一个数,减去较小的数的正整数倍,当然,得到的数 ...
- 【Luogu】P1516青蛙的约会(线性同余方程,扩展欧几里得)
题目链接 定理:对于方程\(ax+by=c\),等价于\(a*x=c(mod b)\),有整数解的充分必要条件是c是gcd(a,b)的整数倍. ——信息学奥赛之数学一本通 避免侵权.哈哈. 两只青蛙跳 ...
- hdu 5512 Pagodas 扩展欧几里得推导+GCD
题目链接 题意:开始有a,b两点,之后可以按照a-b,a+b的方法生成[1,n]中没有的点,Yuwgna 为先手, Iaka后手.最后不能再生成点的一方输: (1 <= n <= 2000 ...
- [P1082][NOIP2012] 同余方程 (扩展欧几里得/乘法逆元)
最近想学数论 刚好今天(初赛上午)智推了一个数论题 我屁颠屁颠地去学了乘法逆元 然后水掉了P3811 和 P2613 (zcy吊打集训队!)(逃 然后才开始做这题. 乘法逆元 乘法逆元的思路大致就是a ...
- 浅谈扩展欧几里得[exgcd] By cellur925
关于扩展欧几里得从寒假时就很迷,抄题解过了同余方程,但是原理并不理解. 今天终于把坑填上了qwq. 由于本人太菜,不会用markdown,所以这篇总结是手写的(什么).(字丑不要嫌弃嘛) ****** ...
- [BZOJ1965][AHOI2005] 洗牌 - 扩展欧几里得
题目描述 为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动. 由于Samuel星球相当遥远,科学家们要在飞船中度过相当长的一段时间,小联提议用扑克牌打 ...
- NOIP2012拓展欧几里得
拉板题,,,不说话 我之前是不是说过数据结构很烦,,,我想收回,,,今天开始的数论还要恶心,一早上听得头都晕了 先来一发欧几里得拓展裸 #include <cstdio> void gcd ...
随机推荐
- 一段话让你理解vuex的工作模式!
vuex 个人理解:管理各组件公共状态的vue插件,也是个组件相互通信的插件. 组成:1.State:状态树. 2.Getters:操作state. 3.Mutation:唯一改变state状态的操作 ...
- 机器学习之主成分分析PCA原理笔记
1. 相关背景 在许多领域的研究与应用中,通常需要对含有多个变量的数据进行观测,收集大量数据后进行分析寻找规律.多变量大数据集无疑会为研究和应用提供丰富的信息,但是也在一定程度上增加了数据采集的 ...
- Spring Boot配置文件的加载顺序
配置文件的加载顺序, 后加载的会覆盖先加载的:也就是properties配置文件的内容会替换掉.yml及.yaml文件的内容
- 通过 Kubeadm 安装 K8S 与高可用,版本1.13.4
环境介绍: CentOS: 7.6 Docker: 18.06.1-ce Kubernetes: 1.13.4 Kuberadm: 1.13.4 Kuberlet: 1.13.4 Kuberctl: ...
- em...刚打完一点cf。。 有点子感悟
首先,下笔一定要读清楚题目. 情况多考虑一下. 这几次的模拟赛,分类思想很重要,往往一大坨东西扔给你,你不去尝试分类的话就很难整理清楚.
- 🕯国家公祭日-默哀javascript脚本
国行公祭,祀我国殇 兽行暴虐,共御外侮 昭昭前事,惕惕后人 永失弗谖,祈愿和平 var national_memorial_days=['12-13']; var dateObj=new Date() ...
- copy 合并
copy /b xxx.jpg + yyy.txt zzz.jpg /b 二进制 /a 文本
- Java Swing中文乱码解决方法
Run As Run Configuration,在Arguments中增加下面这句: -Dfile.encoding=gbk
- interface Part3(实现:显示和隐式)
1. 接口的实现实际上和类之间的继承是一样的,也是重写了接口中的方法,让其有了具体的实现内容. 2. 但需要注意的是,在类中实现一个接口时必须将接口中的所有成员都实现,否则该类必须声明为抽象类,并将接 ...
- [NOIP11.1模拟赛]补番报告
Preface 昨天开始补某科学的超电磁炮S 感觉今天就好了点,炮姐赛高 T1 一开始一直想欧拉定理&ex欧拉定理,结果估计70分,数组开小了GG,看了正解发现是我学傻了 T2 一看就是数据结 ...