結果

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

ソースコード

diff #

#include <iostream>
#include <string> // 虽然没直接用,但包含常见的头文件是好习惯

int main() {
    // 提高 C++ I/O 速度 (在竞技编程中常用)
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(NULL);

    long long A, B;
    std::cin >> A >> B;

    // 检查输入是否符合约束 (理论上不需要,因为题目保证了 A, B >= 1)
    // if (A <= 0 || B <= 0) {
    //     // 处理无效输入或边界情况,根据需要
    //     return 1;
    // }

    while (true) {
        // --- Alice's Turn ---
        // 在 Alice 回合开始时,A 和 B 必定都大于 0,否则游戏在上个回合就结束了

        if (A >= B) {
            // 如果 B=0 会怎样? 但 B>0 因为循环条件。
            // 如果 B=1, A % B = A % 1 = 0. Alice 直接获胜。
            if (B == 0) { // 防御性检查,理论上不会发生
                 std::cout << "Alice" << std::endl; // Bob 的数为 0,Alice 胜? 规则是自己变0才赢
                 return 0; // 或者根据具体规则处理
            }
            A = A % B;
            if (A == 0) {
                // Alice 将自己的数 A 变成了 0
                std::cout << "Alice" << std::endl;
                return 0;
            }
            // 如果 A 没变 0, 则 A 现在严格小于 B
        } else { // A < B
            // Alice 必须执行 A = A - 1
            A = A - 1;
             if (A == 0) {
                 // Alice 将自己的数 A 变成了 0
                 std::cout << "Alice" << std::endl;
                 return 0;
             }
             // A 可能仍然小于 B,或者等于 B-1
        }
        // Alice 移动后: A >= 0, B > 0. 如果 A > 0, 轮到 Bob

        // --- Bob's Turn ---
        // 在 Bob 回合开始时,A 和 B 必定都大于 0,否则游戏在上个回合就结束了

        if (B >= A) {
            // 如果 A=0 会怎样? 但 A>0 因为循环条件。
            // 如果 A=1, B % A = B % 1 = 0. Bob 直接获胜。
             if (A == 0) { // 防御性检查
                 std::cout << "Bob" << std::endl;
                 return 0;
             }
             B = B % A;
             if (B == 0) {
                 // Bob 将自己的数 B 变成了 0
                 std::cout << "Bob" << std::endl;
                 return 0;
             }
             // 如果 B 没变 0, 则 B 现在严格小于 A
        } else { // B < A
             // Bob 必须执行 B = B - 1
             B = B - 1;
             if (B == 0) {
                 // Bob 将自己的数 B 变成了 0
                 std::cout << "Bob" << std::endl;
                 return 0;
             }
             // B 可能仍然小于 A,或者等于 A-1
        }
        // Bob 移动后: A > 0, B >= 0. 如果 B > 0, 轮到 Alice
    }

    return 0; // 理论上循环内总会 return
}
0