zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    遥远的国度(D12 树链剖分)
    Codechef DGCD Dynamic GCD(D12 树上GCD)
    html总结
    数据库大总结
    html笔记
    Linux常用快捷键
    进程
    多进程
    进程介绍
    网络并发
  • 原文地址:https://www.cnblogs.com/JinxiSui/p/9740556.html
Copyright © 2011-2022 走看看