zoukankan      html  css  js  c++  java
  • 【洛谷P1290】欧几里德的游戏

    问题描述

    输入格式

    输出格式

    样例输入

    2
    25 7
    24 15

    样例输出

    Stan wins
    Ollie wins

    数据范围

    题解

    先假设m为两个数中较大的数,n为较小的数。

    考虑两种情况:

    1、m div n =1,这种情况只有一种操作,即减去较小的数的一倍

    2、m div n >1,这种情况有多种操作,即可以减去较小的数的一倍,两倍,三倍,……并且可以控制操作后是m>n还是n>m

    对于第一种情况,这种情况下只有一种操作,是被动的,假设第i局到第j局都是第一种情况,第i-1局和第j+1局是第二种情况,那么只要知道第i局两个数的值,就一定可以推出第j+1局两个数的值。而第i局的值是由第i-1局决定的,所以第i-1局的操作者(设为甲,另一人为乙)是主动的。甲可以通过操作决定第j+1局的值,以及j-i+1的值。若j-i+1为奇数,即连续奇数局是第一种情况,则第j+1局的操作者又是甲,即甲将会再一次获得主动,反之乙会获得主动。由于两人“完美地操作”,甲可以通过操作后使m>n或n>m来控制下一次的主动落在自己手中。所以甲是必胜的,即先达到第二种情况的人必胜。

    由题Stan先操作,若开始时是第二种情况,则Stan获胜,若开始时是第一种情况,就模拟找出第一个达到第二种情况的人为胜者。

     1 #include <cstdio>
     2 int c,m,n,f;
     3 int main()
     4 {
     5     int t;
     6     scanf("%d",&c);
     7     while (c--)
     8     {
     9         scanf("%d%d",&n,&m);
    10         if (n>m) t=m,m=n,n=t;
    11         f=1;
    12         while (m/n==1 && m%n)
    13           t=m%n,m=n,n=t,
    14           f^=1;
    15         if (f) printf("Stan wins
    ");
    16         else printf("Ollie wins
    ");
    17     }
    18     return 0;
    19 }
  • 相关阅读:
    MySQL_01 常用命令
    32_Go基础(TCP通信)
    oracle查询优化
    Eclipse中自动添加注释(作者,时间)
    java注解的学习
    JqueryeasyUIdatagrid参数之 queryParams
    Eclipse中,打开文件所在文件夹的插件,及设置
    更改Zend Studio/Eclipse代码风格主题
    JAVA中使用File类批量重命名文件及java.io.File的常见用法
    java面试笔试题大全
  • 原文地址:https://www.cnblogs.com/rabbit1103/p/13493530.html
Copyright © 2011-2022 走看看