結果

問題 No.3112 Decrement or Mod Game
ユーザー aaaaaaaaaaa
提出日時 2025-04-19 00:41:44
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 1,689 bytes
コンパイル時間 666 ms
コンパイル使用メモリ 67,376 KB
実行使用メモリ 7,848 KB
最終ジャッジ日時 2025-04-19 00:41:47
合計ジャッジ時間 2,460 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2 WA * 1
other AC * 44 WA * 21
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <utility> // for std::swap

int main() {
    // 提高 C++ 输入输出效率(通常在竞技编程中使用)
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(NULL);

    long long a, b; // 使用 long long 因为 A, B 可能高达 10^18
    std::cin >> a >> b;

    // x: 当前轮到玩家的数字
    // y: 对手的数字
    long long x = a;
    long long y = b;
    bool current_is_alice = true; // Alice 先手

    while (true) {
        // 检查终止条件 (基于对手的数字 y)
        // 如果对手的数字 y == 0, 意味着上一个回合对手的操作使自己的数字归零,
        // 所以当前玩家获胜。
        if (y == 0) {
            std::cout << (current_is_alice ? "Alice" : "Bob") << std::endl;
            break;
        }
        // 检查当前玩家的数字 x 是否为 0。如果是,当前玩家无法移动,输掉游戏。
        // 对手获胜。
        if (x == 0) {
             std::cout << (current_is_alice ? "Bob" : "Alice") << std::endl;
             break;
        }

        // 检查必胜条件: x >= 2 * y
        // 注意 y 不为 0 (已在前面检查过)
        if (x >= 2 * y) {
            std::cout << (current_is_alice ? "Alice" : "Bob") << std::endl;
            break;
        }

        // 根据最优策略选择操作
        if (x >= y) { // 情况: y <= x < 2y
            // 执行 M-move
            x %= y;
        } else { // 情况: x < y
            // 必须执行 D-move
            x -= 1;
        }

        // 交换 x 和 y,并将回合交给对方
        std::swap(x, y);
        current_is_alice = !current_is_alice;
    }

    return 0;
}
0