結果
問題 |
No.3112 Decrement or Mod Game
|
ユーザー |
![]() |
提出日時 | 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 |
ソースコード
#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; }