这题没必要那么麻烦,只需要推理一下即可:

假设我们有两个数\(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 【欧几里德的游戏】的更多相关文章

  1. 洛谷——P1290 欧几里德的游戏

    P1290 欧几里德的游戏 题目描述 欧几里德的两个后代Stan和Ollie正在玩一种数字游戏,这个游戏是他们的祖先欧几里德发明的.给定两个正整数M和N,从Stan开始,从其中较大的一个数,减去较小的 ...

  2. 洛谷P1290 欧几里德的游戏

    题目:https://www.luogu.org/problemnew/show/P1290 只要出现n>=2*m,就可以每次把较大的数控制在较小的数的一倍与二倍之间,则控制了对方的走法: 每次 ...

  3. 洛谷P1290欧几里德游戏

    题目地址 题目大意: 两个人st和ol博弈 有两个整数n,m 每次轮到一个人时候,需要选择用大的那个数减去小的那个数的倍数(不能减为负数) 最后得到0的为胜利者 思路: (以下讨论均在n<m的条 ...

  4. 题解 洛谷 P3825 【[NOI2017]游戏】

    从题面中四元组\((i,h_i,j,h_j)\)限制选择车子型号,不难想到这题要用\(2-SAT\)解决. 考虑转化为\(2-SAT\)模型,发现除地图\(x\)外,其他地图都只有两种车子型号可以参加 ...

  5. 洛谷P1274-魔术数字游戏

    Problem 洛谷P1274-魔术数字游戏 Accept: 118    Submit: 243Time Limit: 1000 mSec    Memory Limit : 128MB Probl ...

  6. 洛谷P1118 数字三角形游戏

    洛谷1118 数字三角形游戏 题目描述 有这么一个游戏: 写出一个1-N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少1,直 ...

  7. P1290 欧几里德的游戏

    P1290 欧几里德的游戏 原本不想写的,但细节有些多qwq,还是放上吧. 假设a严格大于b 当a<b*2时,只有一种方法往下走:否则就可以有多种方法,并且一定至少有一种可以使自己必胜,因为可以 ...

  8. 洛谷P1288 取数游戏II(博弈)

    洛谷P1288 取数游戏II 先手必胜的条件需要满足如下中至少 \(1\) 条: 从初始位置向左走到第一个 \(0\) 的位置,经过边的数目为偶数(包含 \(0\) 这条边). 从初始位置向右走到第一 ...

  9. 「区间DP」「洛谷P1043」数字游戏

    「洛谷P1043」数字游戏 日后再写 代码 /*#!/bin/sh dir=$GEDIT_CURRENT_DOCUMENT_DIR name=$GEDIT_CURRENT_DOCUMENT_NAME ...

随机推荐

  1. Stream知识点总结及源码阅读

    上次[http://www.cnblogs.com/webor2006/p/7795596.html]对Stream进行了简单的学习,这次继续学习Stream,还是结合java8 in action这 ...

  2. 关于工作中.net转java遇到的一个远程调用传递重复参的问题。

    工作中遇到一个很奇怪的传参问题.之前.net使用的是一个List列表,列表中有几个重复的参数.列表中使用的model类是KeyValue. 我使用java模仿其写法,传递List和KeyValue.对 ...

  3. (二)linux 学习 -- 探究操作系统

    The Linux Command Line 读书笔记 - 部分内容来自 http://billie66.github.io/TLCL/book/chap04.html 文章目录 ls 命令进阶 `l ...

  4. C++ 与 MATLAB 混合编程总结(14)

    1. 前言 因为毕业设计的需求,研究了一下,C++如何与MATLAB一起混合编程,中间走了一些弯路,这里总结一下. 我用的主要是C++如何调用MATLAB,而没有涉及MATLAB如何调用C++. 注意 ...

  5. 第五章 模块之 shtil 、 json / pickle、importlib、collections

    5.8 shtil 高级的 文件.文件夹.压缩包 处理模块 shutil.rmtree 删除目录 import shutilshutil.rmtree(path) shutil.move 重命名:移动 ...

  6. PAT甲级题分类汇编——图

    本文为PAT甲级分类汇编系列文章. 图,就是层序遍历和Dijkstra这一套,#include<queue> 是必须的. 题号 标题 分数 大意 时间 1072 Gas Station 3 ...

  7. 第1章 云端开发平台Salesforce CRM

    1.1云计算平台 传统软件的开发往往耗资成千上万(甚至几百万)美元,有时需要几年的专业服务帮助建立和定制应用程序,而软件的业务问题往往由于其十分复杂或成本太高而无法触及.随着Internet的革新,改 ...

  8. Docker 学习笔记(二):Dockerfile 定制镜像

    镜像的定制实际上就是定制每一层所添加的配置.文件. 如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么之前提及的无法重复的问题.镜像构建透明性的问题.体积 ...

  9. 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 ...

  10. MyBatis Generator 自动生成的POJO对象的使用(二)

    四.Example Class使用说明 示例类指定如何构建动态where子句. 表中的每个非BLOB列都可以选择包含在where子句中. 示例是演示此类用法的最佳方法. 示例类可用于生成几乎无限制的w ...