原题链接:http://poj.org/problem?id=2348

Euclid’s Game

Description

Two players, Stan and Ollie, play, starting with two natural numbers. Stan, the first player, subtracts any positive multiple of the lesser of the two numbers from the greater of the two numbers, provided that the resulting number must be nonnegative. Then Ollie, the second player, does the same with the two resulting numbers, then Stan, etc., alternately, until one player is able to subtract a multiple of the lesser number from the greater to reach 0, and thereby wins. For example, the players may start with (25,7):
25 7

     11 74 74 31 31 0

an Stan wins.

Input

The input consists of a number of lines. Each line contains two positive integers giving the starting two numbers of the game. Stan always starts.

Output

For each line of input, output one line saying either Stan wins or Ollie wins assuming that both of them play perfectly. The last line of input contains two zeroes and should not be processed.

Sample Input

34 12
15 24
0 0

Sample Output

Stan wins
Ollie wins

题解

我们可以把这个过程理解为一个多阶段NimNim\mathcal{Nim},有多堆石子,每堆石子都有一个可以取的次数,每次至少取一次,可以取多次,在取完上一堆后才能取下一堆,以样例中的第一组数据为例:

(34,12)可以取两个12,取完以后变成(12,10)
(12,10)只能取一次,变成(10,2)
(10,2)取5次取完变成(2,0)

那么转化为多阶段NimNim\mathcal{Nim}游戏是3堆石子:2,1,5

在多阶段NimNim\mathcal{Nim}中,如果先手取下一堆能够赢,那么在取这一对的时候就可以将这堆石子取的刚好剩下一个,强迫对手取完这一堆;反之,就可以直接将这堆石子取完,让对手去取下一堆。只有当某堆石子只能取一次的时候,先手的人别无选择必须取完。

那么问题就变得简单起来,只要谁掌握了先手(即第一个遇到可取次数大于1的情况),谁就能获胜。

代码
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m;
bool check(int x,int y,bool p)
{if(x%y==0)return p;if(x/y>1)return p;return check(y,x%y,!p);
}
void ac()
{if(n<m)swap(n,m);if(check(n,m,1))printf("Stan wins\n");else printf("Ollie wins\n");
}
int main()
{while(scanf("%d%d",&n,&m)&&n&&m)ac();return 0;
}

POJ2348 Euclid's Game相关推荐

  1. 博弈论探讨及题目总结

    转载自爱神博客:http://blog.csdn.net/acm_cxlove/article/details/7854526 首先当然要献上一些非常好的学习资料: 基础博弈的小结:http://bl ...

  2. Game Theory: 公平博弈

    Notes: The following excerpt is from a book <GAME THEORY>by Thomas && S.Ferguson and a ...

  3. POJ 2348 Euclid's Game(博弈)题解

    题意:有a,b两个数字,两人轮流操作,每次可以选择两个之中较小的数字,然后另一个数字减去选择数字的任意倍数(不能减到负数),直到其中一个为0,不能操作为败 思路:这题用博弈NP思想,必败点和必胜点之间 ...

  4. NUC1445 Euclid's Game【博弈】

    Euclid's Game 时间限制: 1000ms 内存限制: 65535KB 问题描述 Two players, Stan and Ollie, play, starting with two n ...

  5. 关于Euclid算法

    Euclid算法大概是我最早接触的东西了吧,下面是学长传授的代码: 1 int GCD(int a,int b){ 2 return b==0?a:GCD(b,a%b); 3 } 短小精悍.当时也没理 ...

  6. C语言求最大公约数欧几里得Euclid算法(附完整源码)

    最大公约数欧几里得Euclid算法 最大公约数欧几里得Euclid算法完整源码(定义,实现,main函数测试) 最大公约数欧几里得Euclid算法完整源码(定义,实现,main函数测试) #inclu ...

  7. 推广的euclid_欧几里德(Euclid)贴近度评价法在人类进化上的应用

    文●螭母:1008一s688 12001)Ol一0006-03 欧几里德(Euclid)贴近度评价法在人类进化上的应用 刘国民1,宋香梅2 (1奉溪拜专,皋溪117022:2.本溪市圆税局,苯澳117 ...

  8. 可公度线段与欧几里得(Euclid)算法

    通过本文,我们将发现欧几里得算法(求两个数的最大公约数,也称作辗转相除),根本不需要死记硬背,仅仅通过数论中的一个小小的结论(有关可公度线段,commensurable),即可轻易推导出来. 既然算法 ...

  9. 『扩展欧几里得算法 Extended Euclid』

    Euclid算法(gcd) 在学习扩展欧几里得算法之前,当然要复习一下欧几里得算法啦. 众所周知,欧几里得算法又称gcd算法,辗转相除法,可以在\(O(log_2b)\)时间内求解\((a,b)\)( ...

  10. 欧几里得  拓展欧几里得算法 讲解 (Euclid Extend- Euclid Algorithm)

    欧几里得& 拓展欧几里得(Euclid & Extend-Euclid) 欧几里得算法(Euclid) 背景: 欧几里德算法又称辗转相除法,用于计算两个正整数a,b的最大公约数.   ...

最新文章

  1. composer自动载入的四种方式
  2. 人工智能和物联网:智慧城市的交通管理
  3. mysql忘记密麻麻_mysql忘记密码怎么办
  4. 朴素贝叶斯 python 实现
  5. mysql 查看索引命中_请问下如何在Mysql中where与orderBy后在命中索引?
  6. mysql重复make_Mysql5.6 make 错误以及解决办法
  7. idea 自动生成补全变量名 快捷键
  8. html几个数据包,报文和数据包的区别
  9. GitHub 上 5 款超好用的数据库 GUI 带你玩转 MongoDB、Redis、SQL 数据库
  10. iOS:NSDate的主要几种时间形式
  11. android studio 可视化编程,Android Studio 可视化界面 (Design)和文本界面(Text)的切换...
  12. 大橙子主题vfed3.15模板
  13. 流处理和批处理框架的异同
  14. Windows Rootkit 技术分析
  15. 油猴脚本更改tw样式
  16. 新浪短网址API接口的获取以及API接口的调用文档分享
  17. 居家办公不敢上厕所!5分钟抓拍一次,不够89次算旷工?尚德机构回应...
  18. 在家远程控制公司电脑怎么实现 7款好用的远程工具介绍
  19. Scrum立会报告+燃尽图(十月十七日总第八次)
  20. 出版社、作者和图书 出版社类:属性:编号,出版社名称,地址 方法:显示出版社的信息 构造:无参构造方法、有参构造方法 作者类:属性:作者的编号,姓名 方法:显

热门文章

  1. Hbase API实现倒序查询
  2. java按钮鼠标_我想用java做一个鼠标永远点不到button的应用,下面这个程序的错误在哪?...
  3. java字符串查找算法_java – 查找所有“字符相等”字符串的高效算法?
  4. Zookeeper-单机/集群安装
  5. 最好的PDF阅读器,Foxit Reader绿色V8.0
  6. 模仿iframe框架,由分隔栏动态改变左右两侧div大小———基于jQuery
  7. CSS3+HTML5特效5 - 震动的文字
  8. [导入]在windows下建立的自己cvsnt服务器
  9. Designing With Web Standard(一)
  10. 微信公众号自定义菜单