欧几里德的两个后代 Stan 和 Ollie 正在玩一种数字游戏,这个游戏是他们的祖先欧几里德发明的。给定两个正整数 M 和 N,从 Stan 开始,从其中较大的一个数,减去较小的数的正整数倍,当然,得到的数不能小于 0。然后是 Ollie,对刚才得到的数,和 M,N 中较小的那个数,再进行同样的操作……直到一个人得到了 0,他就取得了胜利。下面是他们用 (25,7) 两个数游戏的过程:

Start:(25,7)

Stan:(11,7)

Ollie:(4,7)

Stan:(4,3)

Ollie:(1,3)

Stan:(1,0)

Stan 赢得了游戏的胜利。

现在,假设他们完美地操作,谁会取得胜利呢?

输入格式
本题有多组测试数据。

第一行为测试数据的组数 C。 下面 C 行,每行为一组数据,包含两个正整数 M,N(M,N<2^31)

输出格式
对每组输入数据输出一行,如果 Stan 胜利,则输出 Stan wins;否则输出 Ollie wins。
# 以上是题目,正文开始
众所周知,博弈论有一个神函数叫SG函数,今天我不讲,~~我不会~~。我用自己的方法来做这道题。

# 先手的Stan占有绝对优势。
如果输入里两个数中较大的一个除以较小的一个的结果>2。Stan稳赢,因为Stan可以分析后面的战局,减成一个合适的数字。所以大数除小数>2,就可以直接输出了。同样,大数除小数可以整除,也可以直接输出。Stan直接减成0。

拿样例解释:25 7

如果Stan想让(4,7)时自己取,就先取成(11,7),Ollie被迫取成(4,7)。Stan达到目的。

如果Stan想让(4,7)时Ollie取,就直接取成(4,7),Ollie被迫取(4,7)。Stan达到目的。

//n和m就是那两个数。
if(n<m)//n如果小于m,就交换。所以n是大数,m是小数。
{
  k=n;
  n=m;
  m=k;
}
if(n/m>1)//大数除小数>1,Stan可以控制局面
{
  cout<<"Stan wins"<<endl;
  continue;
}
if(n%m==0)//大数除小数整除,Stan直接归零秒杀。
{
  cout<<"Stan wins"<<endl;
  continue;
}

一开始看不出来的话,就只能硬刚了。如果中途碰到可以控制局面的情况,那么碰到的那个人赢。不然就一直刚到其中一个数为0。

完整代码

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
using namespace std;
long long n,m,shu,hehe,k;
int main()
{
  cin>>hehe;
  for(int i=0;i<hehe;i++)
  {  
    cin>>n>>m;
    shu=0;
    if(n<m)//把n定为大数,m固定小数。
    {
      k=n;
      n=m;
      m=k;
    }
    if(n/m>1)//Stan稳赢情况
    {
      cout<<"Stan wins"<<endl;
      continue;
    }
    if(n%m==0)//Stan稳赢情况
    {
      cout<<"Stan wins"<<endl;
      continue;
    }
    while(true)//开局没有稳赢情况,开始硬刚
    {
      if(n<m)
      {
        k=n;
        n=m;
        m=k;
      }
      if(n/m>1)//控制局面点。到达者胜
      {
        if(shu%2==0)
        {
          cout<<"Stan wins"<<endl;
          break;
        }else
        {
          cout<<"Ollie wins"<<endl;
          break;
        }
      }
      if(n%m==0)//直接归零点。到达者胜
      {
        if(shu%2==0)
        {
          cout<<"Stan wins"<<endl;
          break;
        }else
        {
          cout<<"Ollie wins"<<endl;
          break;
        }
      }
      n-=m;//不会有必胜局面,只能做大数减小数的操作。
      shu++;//标记轮数。奇数轮是Ollie操作,偶数论是Stan操作,
    }
  }
return 0;
}

好的,就这么结束了。代码好2啊。

P1290 欧几里德的游戏(洛谷)的更多相关文章

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

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

  2. P1290 欧几里德的游戏

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

  3. P4554 小明的游戏 (洛谷) 双端队列BFS

    最近没有更新博客,全是因为英语,英语太难了QWQ 洛谷春令营的作业我也不会(我是弱鸡),随机跳了2个题,难度不高,还是讲讲吧,学学新算法也好(可以拿来水博客) 第一题就是这个小明的游戏 小明最近喜欢玩 ...

  4. NOIP2012 Day1 T2国王游戏 洛谷P1080

    第一篇博客啊…… 由于我太弱了,还要去补不全的知识点准备参加人生第一次NOIp,所以第一篇博客就简短一点好了(偷懒就直说吧……) 洛谷P1080传送门 题意概括: 有N对数ai和bi,以及两个数a0和 ...

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

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

  6. AC日记——欧几里得的游戏 洛谷 P1290

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

  7. LUOGU P1290 欧几里德的游戏

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

  8. 矩阵取数游戏洛谷p1005

    题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...

  9. (基础 输入方法 栈)P1427 小鱼的数字游戏 洛谷

    题目描述 小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字(长度不一定,以0结束,最多不超过100个,数字不超过2^32-1),记住了然后反着念出来(表示结束的数字0就不要念出来了).这对小鱼的 ...

随机推荐

  1. mybatis-config.xml核心文件配置

    一.全局配置文件结构 configuration 配置 properties 属性:可以加载properties配置文件的信息 settings 设置:可以设置mybatis的全局属性 typeAli ...

  2. android 中使用自定义权限在广播中的利用

    1.在一个进程中发送一个有自定义权限的广播,另外一个进程中拥有广播接受者接受到该广播 <?xml version="1.0" encoding="utf-8&quo ...

  3. 入门大数据---Elasticsearch是什么?

    Elasticsearch是谁不重要,重要的是咱们都知道百度,谷歌这样的搜索巨头吧.它们的核心技术都利用了Elasticsearch,所以我们有必要对Elasticsearch了解下! 1.Elast ...

  4. ceph rbd块存储挂载及文件存储建立

    一.rbd块存储挂载 1 创建一个OSD pool # ceph osd pool create rbd1 128 查询存储空间使用 # ceph df GLOBAL: SIZE AVAIL RAW ...

  5. 补充:回答网友的问题,如何不用路径,而直接将CImage画到DC中,之后DC一起显示.

    补充:回答网友的问题,如何不用路径,而直接将CImage画到DC中,之后DC一起显示.注释掉 pDC->BeginPath(); // 打开路径层 pDC->Rectangle(0,0,p ...

  6. 解决IE浏览器中点击按钮上传无效的问题

    前几天写了上传功能,点击按钮上传,在谷歌中是没有任何问题的: 但是在IE浏览器中点击没有任何效果 源代码如下:  后来发现在Firefox.IE浏览器中button标签内部可以含有其他标签,但是不能对 ...

  7. Oracle 存储过程中的临时表数据自动清空

    问题叙述: 用 EXECUTE IMMEDIATE 动态往临时表插入数据,跟踪发现插入临时表后数据会立马清空,按理说等存储过程执行完才会清空临时表才对,现在是执行插入语句后下一步验证就发现临时表就没有 ...

  8. oracle闪回,找回已提交修改的记录

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_24521431/article/details/84580166 例如删除ward_id为96 ...

  9. 洛谷P3694 邦邦的大合唱站队【状压dp】

    状压dp 应用思想,找准状态,多考虑状态和\(f\)答案数组的维数(这个题主要就是找出来状态如何转移) 题目背景 \(BanG Dream!\)里的所有偶像乐队要一起大合唱,不过在排队上出了一些问题. ...

  10. Buy a Ticket 【最短路】

    题目 Musicians of a popular band "Flayer" have announced that they are going to "make t ...