ZOJ 1913 Euclid's Game 博弈论

题目描述

小明和小红在玩欧几里得游戏。他们从两个自然数开始,第一个玩家小明,从两个数的较大数中减去较小数的尽可能大的正整数倍,只要差为非负即可。然后,第二个玩家小红,对得到的两个数进行同样的操作,然后又是小明。就这样轮流进行游戏,直至某个玩家将较大数减去较小数的某个倍数之后差为0为止,此时游戏结束,该玩家就是胜利者。

输入格式

输入包含多组测试数据。每组输入两个正整数,表示游戏一开始的两个数,游戏总是小明先开始。

当输入两个0的时候,输入结束。

输出

对于每组输入,输出最后的胜者,我们认为他们两个都是顶尖高手,每一步游戏都做出了最佳的选择。

具体输出格式见输出样例。

样例输入

34 12

15 24

0 0

样例输出

xiaoming wins

xiaohong wins

思路:

可分为三种情况

m为较大数 n为较小数

当m%n==0时:谁取则谁胜

当m/n等于1时 只有一种取法
(m,n)->(n,m%n)

当m/n>=2时  谁取则谁胜 : 因为当(n,m%n)为必败态时
取者可将其取为(m%n+n,n) 
则必败态转移给另一人  反之如果(m%n+n,n)为必败态

取者可取为(n,m%n) 
这也叫做先手优势

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
    int a,b,tt,t;
    while(scanf("%d%d",&a,&b)==2&&a+b)
    {
        tt=1;
        while(1)
        {
          if(b>a)
          {
              t=a;
              a=b;
              b=t;
          }
          if(a%b==0||a/b>=2)
            break;

          tt=!tt;
          a=a%b;
        }
        if(tt==1)
            printf("xiaoming wins\n");
        else
            printf("xiaohong wins\n");
    }
    return 0;
}

ZOJ 1913 Euclid's Game 博弈论

时间: 2024-10-07 13:55:49

ZOJ 1913 Euclid's Game 博弈论的相关文章

[poj2348]Euclid&#39;s Game(博弈论+gcd)

Euclid's Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9033   Accepted: 3695 Description Two players, Stan and Ollie, play, starting with two natural numbers. Stan, the first player, subtracts any positive multiple of the lesser o

【博弈论】poj2348 Euclid&#39;s Game

假设当前b>a. 一.b%a==0 必胜 二.b<2*a,当前我们没有选择的余地,若下一步是必胜(最终能到情况一),则当前必败:反之,当前必胜. 三.b>2*a,假设x是使得b-ax<a的整数,考虑一下从b中减去a(x-1)的情况,例如对于(4,19)则减去12. 此时,接下来的状态就成了前边讲过的没有选择余地的情况二,若该状态是必败态的话,当前状态就是必胜态. 若该状态是必胜态的话,其下一步是唯一确定的,因此是必败态,所以我们可以直接到达此态. ∴情况三是必胜态. ∴先达到情况一

POJ - 2348 Euclid&#39;s Game(博弈论入门题)

题目链接:poj.org/problem?id=2348 题意:给出两个数,两个人进行博弈,每个人都采取最优策略. 每个人可以进行操作:两个数中较大数减去较小数的倍数(可以是1,2...X倍),使得其中一个数先为零的获胜. 每次都先把较小值给a,较大值给b.一开始把必胜态给先手的那个人,然后进行判断. 1.b-a<=a  没办法只能一次一次计算,必胜态不断变换,直到其中一个数刚好为0. 2.b-a>a   不管怎样都是必胜态.b - xa <= a如果这个是必败态,那么b - (x-1)

【博弈论】Euclid&#39;s Game

题目描述: 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 nonne

ZOJ 3057 Beans Game 博弈论 sg函数

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3057 典型的sg函数,数据范围卡得真好啊 代码 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<cmath> 5 #include<iostream> 6 #include<map> 7 using namespac

POJ【数论/组合/博弈论】

 POJ[数论/组合/博弈论]题目列表 POJ[数论/组合/博弈论]题目列表 原来的列表比较水,今天换了一个难一些的列表,重新开始做~ 红色的代表已经AC过,蓝色的代表做了但是还没过.这句话貌似在我空间里的每份列表里都有额. 博弈论 POJ 2234 Matches Game POJ 2975 Nim POJ 2505 A multiplication game POJ 1067 取石子游戏 POJ 2484 A Funny Game POJ 2425 A Chess Game POJ 29

博弈论类题目小结——转载

出处http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 首先当然要献上一些非常好的学习资料: 基础博弈的小结:http://blog.csdn.net/acm_cxlove/article/details/7854530 经典翻硬币游戏小结:http://blog.csdn.net/acm_cxlove/article/details/7854534 经典的删边游戏小结:http://blog.csdn.net/acm

POJ 2348-Euclid&#39;s Game(博弈论)

Euclid's Game Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 2348 Appoint description:  System Crawler  (2015-03-11) Description Two players, Stan and Ollie, play, starting with two natural num

hdu 1536 S-Nim 博弈论,,求出SG&#39;函数就可以解决

S-Nim Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4975    Accepted Submission(s): 2141 Problem Description Arthur and his sister Caroll have been playing a game called Nim for some time now