uva 10368 - Euclid's Game(博弈)

题目链接:uva 10368 - Euclid‘s Game

题目大意:给出两个数,两个人做一个游戏,每次有stan开始操作,每次操作可以从最大的数中取走若干个小的数,即a-kb,a为比较大的数,b为比较小的数,kb为取走的值,k必须为整数,并且kb≤a。如果不能顺利执行操作,则对手胜利。

解题思路:模拟,直到k的最大值不为1时,当前操作者就掌握了主动权,既可以获胜。特殊情况为a=b的时候,stan胜。

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

int main () {
    int a, b;
    while (scanf("%d%d", &a, &b) == 2 && a + b) {
        int s = 0;

        if (a != b) {
            int x = max(a, b);
            int y = min(a, b);

            while (true) {
                if (x / y > 1)
                    break;
                x = x%y;
                swap(x, y);
                s = 1 - s;
            }
        }
        printf("%s wins\n", s ? "Ollie" : "Stan");
    }
    return 0;
}

uva 10368 - Euclid's Game(博弈),布布扣,bubuko.com

uva 10368 - Euclid's Game(博弈)

时间: 2024-10-11 12:10:59

uva 10368 - Euclid's Game(博弈)的相关文章

UVA 10368 - Euclid&#39;s Game(数论+博弈)

10368 - Euclid's Game 题目链接 题意:Stan和Ollie玩游戏,有两个数字a,b,每次可以选择较小数字的倍数,把另一个数字-去这个数,要保证>= 0,最后谁那步能得出0谁就赢了,问谁会赢. 思路:其实这个相减的过程就是一个辗转相除的过程,考虑每一次辗转相除,如果只有1倍的数可以减,那么必须到下一步,如果有多步,先手的就有机会选择是自己到下一步或者让对方到下一步,这样先手的就必胜了,于是利用辗转相除,求出谁能先掌控局面,就是谁赢了. 代码: #include <stdio

hdu 1525 Euclid&#39;s Game 博弈

Euclid's Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2219    Accepted Submission(s): 1000 Problem Description Two players, Stan and Ollie, play, starting with two natural numbers. Stan

Uva 10404-Bachet&#39;s Game(博弈)

题目链接:点击打开链接 在DP专题里刷到的,看着像博弈就水过去了.. 题意:n件物品,两个人轮流取,每次取的数量必须为一个集合s(集合里肯定含有1)里的一个数字,最后不能取者输(即取走最后一件物品者胜). 思路:递推.设 w[i] 为有i件物品时的状态,w[i]=1代表先手必胜,w[i]=0代表先手必败.可以知道w[1]=1,递推生成所有状态. 可以知道对于一个状态,如果他的后继存在必败状态,则该状态为必胜状态:如果该状态的所有后继都为必胜状态,那么该状态为必败状态. #include <alg

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

题目地址:POJ 2348 每一步只有如下三种情况:(假设a>=b) 1:a%b==0    这时候自然是必败态. 2:a<2*b  这时候的下一步是别无选择的,只能是变为(a-b,a),由于该步是唯一的,所以必胜态与必败态是交替的. 3:a>2*b  这时候是必胜态.为什么呢?因为此时总可以转移到一个必败态.由于第2情况的时候两种状态是交替的,而这时候由总可以转换成(a,a%b)和(a,a%b+b),而(a,a%b+b)与(a,a%b)又属于第2种情况的相邻的,所以必有一个是必败态.根

UVA 847 - A Multiplication Game(博弈)

UVA 847 - A Multiplication Game 题目链接 题意:一个数一开始是1,每次轮流乘2-9,谁先大于n谁就赢,问谁胜 思路:博弈,找出必胜态,2-9为stan,10-18为ollie,19-162为stan...发现都是乘2乘9交替 代码: #include <stdio.h> #include <string.h> #include <math.h> long long n; bool judge(long long n) { long lon

UVA 1500 - Alice and Bob(博弈)

UVA 1500 - Alice and Bob 题目链接 题意:alice和bob这对狗男女play a game,黑板上有n个数字,每次能把一个数字减1,或者把两个数字合成一个数字,值为两数的和,数字减到0就自动被擦去,最后不能操作的算输,alice先手,问最后谁赢 思路:博弈问题,首先想到一点就很好办了,就是对于非1的所有数,肯定会优先去合并成一个数字的,因为如果当前状态能胜,我优先合并掉,对手不管做什么都无法阻止.然后利用必胜态必败态去进行dp,dp[i][j]记录是有i个1,在非1的堆

hdu------(1525)Euclid&#39;s Game(博弈决策树)

Euclid's Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2074    Accepted Submission(s): 924 Problem Description Two players, Stan and Ollie, play, starting with two natural numbers. Stan,

uva 1559 - Nim(记忆化+博弈)

题目链接:uva 1559 - Nim 题目大意:有n个人,奇数的为一队,偶数的为一对,两队分别从一堆石子个数为S的石子堆中取石子,取到最后一个石子一方则视为失败.给出各个队员每次可取石子的上限值,然后按照顺序操作. 解题思路:dp[i][s]表示第i个选手操作时剩s个石子时为必胜还是必败.因为是取到最后一个石子的为输,所以最后递归结束的条件和不同的略有不同. 还尝试过可以将石子数减1,然后普通处理也是可以. /******************* * 取到最后一个石子的输 * *******

uva 10104 Euclid Problem (数论-扩展欧几里德)

 Euclid Problem  The Problem From Euclid it is known that for any positive integers A and B there exist such integers X and Y that AX+BY=D, where D is the greatest common divisor of A and B. The problem is to find for given A and B corresponding X, Y