• Hdu 1525 欧几里得博弈


    两堆石子每次可以在大堆中取小堆的倍数个石子 第一个拿光某个堆的玩家赢

    假设a>=b

    必胜状态:a%b==0或a/b>=2 因为当a/b>=2时 当前玩家可以选择将状态转移至 a%b+b或a%b 同时a%b+b可转移至a%b 则这两个状态中必有一个为必胜态

    #include<bits/stdc++.h>
    using namespace std;
    int main() {
            int a, b;
            while (scanf("%d %d", &a, &b) && (a + b)) {
                    if (a < b) {
                            swap(a, b);
                    }
                    if (a % b == 0) {
                            printf("Stan wins
    ");
                            continue;
                    }
                    int k = 0;
                    while (1) {
                            if (a < b) {
                                    swap(a, b);
                            }
                            if (a % b == 0 || a / b != 1) {
                                    break;
                            }
                            a = a % b;
                            k++;
                    }
                    if (k % 2 == 0) {
                            printf("Stan wins
    ");
                    } else {
                            printf("Ollie wins
    ");
                    }
    
            }
    }
    View Code

    如果是第一个拿光某个堆的玩家输的话

    当前游戏的SG值为[a/b-b/a]向下取整

  • 相关阅读:
    SELECT 的6大子句
    MySQL关联查询
    MySql常用函数
    自动升压降压充电模块 最高25.2V
    压力校准仪开发日志--2017-10-30-2
    动压和静压
    上海无人面馆
    皮托管
    SOC
    LDO
  • 原文地址:https://www.cnblogs.com/Aragaki/p/10635042.html
Copyright © 2020-2023  润新知