#include #include // 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; }