题目链接:

http://poj.org/problem?id=2348

题意:

给定两个数,两个人每次从较大数中减去较小数的倍数,谁先得到0谁获胜,为谁赢?

分析:

令一种可能出现的整数对为(a,b),其中(b>a)。有两种情况

  1. b−a<a,只能从b中减去一个a,得到状态(b−a,a),那么如果(b−a,a)是必胜态的话,(a,b)就是必败态,反之同理。
  2. b−a>a,可以从b中减去至少2个a,假设可以从b中最多可以减去x个a,那么从b中减去(x−1)个a后得到状态(a,b−(x−1)∗a),此时即为讨论的第一种情况。如果状态(a,b−(x−1)∗a)为必败态的话,那么(a,b)就是必胜态,如果状态(a,b−(x−1)∗a)为必胜态的话,那么(b−x∗a,a)肯定是必败态,所以直接减去x倍的a,得到必败态,那么(a,b)即为必胜态。

代码:

#include<iostream>
using namespace std;
int main (void)
{
int a, b;
while(cin>>a>>b && a + b){
bool res = true;
if(a > b) swap(a, b);
while(a != 0){
if(b % a == 0 || b - a > a) break;
b -= a;
res = !res;
if(a > b) swap(a, b);
}
if(res) cout<<"Stan wins"<<endl;
else cout<<"Ollie wins"<<endl;
}
return 0;
}

POJ 2348 Euclid's Game【博弈】的更多相关文章

  1. POJ 2348 Euclid's Game (博弈)

    题意:给定两个整数,两个人轮流操作,每次可以用较大数减去较小数的整数倍,当一个数变成0时,则结束,问谁会胜. 析:很明显如果 a == b 那么就可以直接结束了,那么如果 a > b我们可以交换 ...

  2. poj 2348 Euclid's Game 题解

    Euclid's Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9023   Accepted: 3691 Des ...

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

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

  4. POJ 2348 Euclid's Game(辗转相除博弈+自由度分析)

    题目链接:http://poj.org/problem?id=2348 题目大意:给你两个数a,b,Stan和Ollie轮流操作,每次可以将较大的数减去较小的数的整数倍,相减后结果不能小于0,谁先将其 ...

  5. POJ 2348 Euclid's Game(简单博弈)

    这道题没说a b最大多少,所以要声明为long long型,不然会WA! 道理很简单,(默认a>=b)a和b只有以下三种关系: 1.a%b==0 :这种关系下,可能是a/b为整数,也可能是a和b ...

  6. POJ 2348 Euclid's Game 博弈论

    http://poj.org/problem?id=2348 顺便说,必应翻译真的好用,比谷歌翻译好用100倍. 很难判断这道题的具体博弈类型. 有两种写法,一种是找规律,一种是推理得到关系后循环(或 ...

  7. POJ 2348 Euclid's Game(博弈论)

    [题目链接] http://poj.org/problem?id=2348 [题目大意] 给出两个数,两个参赛者轮流用一个数减去另一个数的倍数,当一个数为0的时候游戏获胜, 求先手是否必胜 [题解] ...

  8. poj 2348 Euclid's Game

    题目: 给两个整数a和b,两个人先后用较大的数减去较小数的整数倍,并且保证相减后为非负数.先把一个数变为0的人获胜. 分析: 很显然,当大数是小数的整数倍时为必胜态. 从这道题学会一个叫做自由度的东西 ...

  9. POJ 2348 Euclid Game (模拟题)

    Euclid's Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7942   Accepted: 3227 Des ...

随机推荐

  1. java读取大文件 超大文件的几种方法

    java 读取一个巨大的文本文件既能保证内存不溢出又能保证性能       import java.io.BufferedReader; import java.io.File; import jav ...

  2. 我的app自动化实战练习一

    ''' -*- coding: utf-8 -*- @Time : 2019/6/10 0010 10:39 @Author : 无邪 @File : test_data.py @Software: ...

  3. 加快create-react-app的方法

    npm config get registry 查看npm源,默认源是 https://registry.npmjs.org/ npm config set registry https://regi ...

  4. No-4.文件和目录常用命令

    文件和目录常用命令 结构 查看目录内容 ls 切换目录 cd 创建和删除操作 touch rm mkdir 拷贝和移动文件 cp mv 查看文件内容 cat more grep 其他 echo 重定向 ...

  5. 【转载】Shell 基础 -- 总结几种括号、引号的用法

    原作者:tongye 原文链接:https://www.cnblogs.com/tongye/p/10646211.html 以下为原文: Shell 脚本中经常需要用到一些括号.引号表达式,功能各不 ...

  6. springboot @test 使用

    @RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class) public class Springtest { ...

  7. github下拉刷新与上拉加载地址

    https://github.com/chrisbanes/Android-PullToRefresh

  8. ç7—UIViewController

    UIViewController继承了UIResponder,而UIResponder继承了NSObject,UIViewController是所有视图控制器的父类. 在MVC模式中,UIViewCo ...

  9. jquery 拖动(Draggable) 约束运动,输出数组排序Array

    <!doctype html><html lang="en"><head> <meta charset="utf-8" ...

  10. 一套出完被喷爆的noip提高组+的题目

    这是一个悲伤的故事. 校内胡测嘛,这当然的重视啦,好好地出完题,看题面不是很难哦,那就用它吧. 结果今天老师考试就用上了(情况不妙) 果然考试过程中就有打喷嚏的冲动. 一道暴力,一道概率DP,一道主席 ...