• HDU 1525


    题意

    Stan和Ollie玩游戏,Stan先手。给出两个数字,可以用大数减去小数的整数倍,要求不能减到小于0。谁先将一个数字减到0,谁获胜。

    思路

    博弈
    假设 a > b
    比赛的时候想到了关于a - b > b ( a > 2 * b )状态下,可以决定必胜、必败态,故若a > 2 * b为必胜态。
    若a%b == 0, a可以减去b的整数倍变为0,故谁达到这个状态即必胜态

    但是当时没考虑周全,这里应该用循环求解,谁达到必胜态则退出循环。

    AC代码

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    int main()
    {
        int a, b;
        while( scanf("%d%d", &a, &b) == 2 && a && b ){
            if( a < b ) swap(a, b);
            bool first = true;
            for(;;){
                if( a % b == 0 || a > 2 * b ) break;
                a -= b;
                swap(a,b);
                first = !first;
            }
            if( first ) puts("Stan wins");
            else puts("Ollie wins");
        }
        return 0;
    }
    
  • 相关阅读:
    noi2002银河英雄传说(并查集)
    Ural1076(km算法)
    km算法的个人理解
    函数之装饰器
    函数进阶(一)
    python全栈测试题(一)
    python基础之循环语句
    字符串方法总结
    python基础3
    python基础2
  • 原文地址:https://www.cnblogs.com/JinxiSui/p/9740556.html
Copyright © 2020-2023  润新知