题解 洛谷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 ...
随机推荐
- Python赋值、浅拷贝、深拷贝
一.赋值(assignment) >>> a = [1, 2, 3] >>> b = a >>> print(id(a), id(b), sep= ...
- Git常用命令及方法
https://blog.csdn.net/web_csdn_share/article/details/79243308 Git常用命令及方法大全 下面是我整理的常用 Git 命令清单.几个专用名词 ...
- ACL 实验
一.环境准备 1. 软件:GNS3 2. 路由:c7200 二.实验操作 实验要求: 1. 掌握标准 ACL.扩展 ACL 的配置方法. 2. 掌握命名 ACL 的配置方法. 3. 掌握访问控制列表配 ...
- qt 旧项目编译运行提示 “启动程序失败,路径或者权限错误?” 原因及解决方法
qt 旧项目编译运行提示 "启动程序失败,路径或者权限错误?" 原因及解决方法 原因 Qt Creator在打开项目文件的同时会生成.pro.user文件,.pro.user文件叫 ...
- 欧拉图Eulerian Graph
一.节点的度 无向图:节点的度为该节点所连接的边数 有向图:节点的度分为入度和出度. 二.欧拉图定义 具有欧拉回路的图称作欧拉图,具有欧拉路径而无欧拉回路的图称为半欧拉图. 欧拉回路: 通过图中每 ...
- go 数据渲染到终端 01
package main import ( "fmt" "text/template" "os" ) type Person struct ...
- 编译内核提示mkimage command not found – U-Boot images will not be built
转載與:http://www.mr-wu.cn/u-boot-tools-binary-package-in-ubuntu/ ubuntu 编译linux kernel时提示: “mkimage” ...
- Express配置ssl证书,为网站开启https
本文不对express多做介绍,下面直奔主题: 一.下载证书(以腾讯云为例): 解压下载的压缩包,找到Nginx文件夹,里面有两个以crt和key结尾的文件,在你的项目根目录新建名为https的空文件 ...
- Spring Cloud Alibaba学习笔记(10) - Spring消息编程模型下,使用RocketMQ收发消息
编写生产者 集成 添加依赖 <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId&g ...
- springboot中将日志信息存放在catalina.base中
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="true& ...