結果
| 問題 |
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 |
ソースコード
#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;
}
aaaaaaaaaaa