题解 洛谷P1290 【欧几里德的游戏】
这题没必要那么麻烦,只需要推理一下即可:
假设我们有两个数\(x,y\),先把\(x\)设为较大值,\(y\)设为较小值。现在分成三种情况:
\(1\).若两数为倍数关系,操作的一方赢。
\(2\).若两数商\(>1\),那么还是操作一方赢。
\(why?\)
比如就拿\(25,7\)来说。这时的操作方有三种选择:\(18\) \(7\),\(11\) \(7\),\(4\) \(7\)
如果他选\(18\) \(7\),那后者就面对的是\(11\) \(7\)或\(4\) \(7\);而如果他不选\(18\) \(7\),那么他面对的还是\(11\) \(7\)或\(4\) \(7\)。
此时你会发现,\(11\) \(7\)和\(4\) \(7\)是必有一个能赢的,而两人都足够聪明,所以谁有选择权谁就能赢!也就是说他不能选\(18\) \(7\)!
再来举一个栗子:\(31\) \(6\)
这时你会发现,先手方只有选\(7\) \(6\)或\(1\) \(6\)才能保证控制权在他手里,而显然\(1\) \(6\)是不行的,所以只能选\(7\) \(6\)。于是\(7\) \(6\) \(--\) \(6\) \(1\) \(--\) \(6\) \(0\),结果是先手赢!
这时你应该知道了:谁有选择权(两种或以上的选择)谁就能赢!
\(3\).商为\(1\),则继续
举个栗子,如\(6\) \(4\),这时先手没有选择权,那就只能继续咯,如\(2\) \(4\)。
\(Code:\)
#include<bits/stdc++.h>
using namespace std;
bool check(int x,int y){
for(int i=1;;i++){
int ma=max(x,y);
int mi=min(x,y);
x=ma,y=mi;
//x为两数较大值,y为两数较小值
if(x%y==0){
return i%2;//若两数为倍数关系,操作的一方赢
}else if(x/y>1){
return i%2;//若两数商>1,那么还是操作一方赢
}else{
x-=y;//否则说明商为1,那就继续
}
}
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
int x,y;
cin>>x>>y;
if(check(x,y))cout<<"Stan wins"<<endl;
else cout<<"Ollie wins"<<endl;
}
return 0;
}
题解 洛谷P1290 【欧几里德的游戏】的更多相关文章
- 洛谷——P1290 欧几里德的游戏
P1290 欧几里德的游戏 题目描述 欧几里德的两个后代Stan和Ollie正在玩一种数字游戏,这个游戏是他们的祖先欧几里德发明的.给定两个正整数M和N,从Stan开始,从其中较大的一个数,减去较小的 ...
- 洛谷P1290 欧几里德的游戏
题目:https://www.luogu.org/problemnew/show/P1290 只要出现n>=2*m,就可以每次把较大的数控制在较小的数的一倍与二倍之间,则控制了对方的走法: 每次 ...
- 洛谷P1290欧几里德游戏
题目地址 题目大意: 两个人st和ol博弈 有两个整数n,m 每次轮到一个人时候,需要选择用大的那个数减去小的那个数的倍数(不能减为负数) 最后得到0的为胜利者 思路: (以下讨论均在n<m的条 ...
- 题解 洛谷 P3825 【[NOI2017]游戏】
从题面中四元组\((i,h_i,j,h_j)\)限制选择车子型号,不难想到这题要用\(2-SAT\)解决. 考虑转化为\(2-SAT\)模型,发现除地图\(x\)外,其他地图都只有两种车子型号可以参加 ...
- 洛谷P1274-魔术数字游戏
Problem 洛谷P1274-魔术数字游戏 Accept: 118 Submit: 243Time Limit: 1000 mSec Memory Limit : 128MB Probl ...
- 洛谷P1118 数字三角形游戏
洛谷1118 数字三角形游戏 题目描述 有这么一个游戏: 写出一个1-N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少1,直 ...
- P1290 欧几里德的游戏
P1290 欧几里德的游戏 原本不想写的,但细节有些多qwq,还是放上吧. 假设a严格大于b 当a<b*2时,只有一种方法往下走:否则就可以有多种方法,并且一定至少有一种可以使自己必胜,因为可以 ...
- 洛谷P1288 取数游戏II(博弈)
洛谷P1288 取数游戏II 先手必胜的条件需要满足如下中至少 \(1\) 条: 从初始位置向左走到第一个 \(0\) 的位置,经过边的数目为偶数(包含 \(0\) 这条边). 从初始位置向右走到第一 ...
- 「区间DP」「洛谷P1043」数字游戏
「洛谷P1043」数字游戏 日后再写 代码 /*#!/bin/sh dir=$GEDIT_CURRENT_DOCUMENT_DIR name=$GEDIT_CURRENT_DOCUMENT_NAME ...
随机推荐
- Stream知识点总结及源码阅读
上次[http://www.cnblogs.com/webor2006/p/7795596.html]对Stream进行了简单的学习,这次继续学习Stream,还是结合java8 in action这 ...
- 关于工作中.net转java遇到的一个远程调用传递重复参的问题。
工作中遇到一个很奇怪的传参问题.之前.net使用的是一个List列表,列表中有几个重复的参数.列表中使用的model类是KeyValue. 我使用java模仿其写法,传递List和KeyValue.对 ...
- (二)linux 学习 -- 探究操作系统
The Linux Command Line 读书笔记 - 部分内容来自 http://billie66.github.io/TLCL/book/chap04.html 文章目录 ls 命令进阶 `l ...
- C++ 与 MATLAB 混合编程总结(14)
1. 前言 因为毕业设计的需求,研究了一下,C++如何与MATLAB一起混合编程,中间走了一些弯路,这里总结一下. 我用的主要是C++如何调用MATLAB,而没有涉及MATLAB如何调用C++. 注意 ...
- 第五章 模块之 shtil 、 json / pickle、importlib、collections
5.8 shtil 高级的 文件.文件夹.压缩包 处理模块 shutil.rmtree 删除目录 import shutilshutil.rmtree(path) shutil.move 重命名:移动 ...
- PAT甲级题分类汇编——图
本文为PAT甲级分类汇编系列文章. 图,就是层序遍历和Dijkstra这一套,#include<queue> 是必须的. 题号 标题 分数 大意 时间 1072 Gas Station 3 ...
- 第1章 云端开发平台Salesforce CRM
1.1云计算平台 传统软件的开发往往耗资成千上万(甚至几百万)美元,有时需要几年的专业服务帮助建立和定制应用程序,而软件的业务问题往往由于其十分复杂或成本太高而无法触及.随着Internet的革新,改 ...
- Docker 学习笔记(二):Dockerfile 定制镜像
镜像的定制实际上就是定制每一层所添加的配置.文件. 如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么之前提及的无法重复的问题.镜像构建透明性的问题.体积 ...
- UOJ #7 NOI2014购票(点分治+cdq分治+斜率优化+动态规划)
重写一遍很久以前写过的题. 考虑链上的问题.容易想到设f[i]为i到1的最少购票费用,转移有f[i]=min{f[j]+(dep[i]-dep[j])*p[i]+q[i]} (dep[i]-dep[j ...
- MyBatis Generator 自动生成的POJO对象的使用(二)
四.Example Class使用说明 示例类指定如何构建动态where子句. 表中的每个非BLOB列都可以选择包含在where子句中. 示例是演示此类用法的最佳方法. 示例类可用于生成几乎无限制的w ...