重构后就寄了 /wul
#include <iostream>
using namespace std;
/**
* 进行操作。
* @param h 被操作的数,会被修改为新的值
* @param p 题面中的 p
* @return h 的值是否被修改了
*/
inline bool operate(int& h, int p) {
int delta = h % p;
h -= delta;
return delta;
}
int main() {
ios::sync_with_stdio(0); cin.tie(nullptr);
int t;
cin >> t;
int n, m, p;
int turn; // 当前执行操作的玩家,1 代表 Alice,2 代表 Bob
int ans; // 胜利的玩家,1 代表 Alice,2 代表 Bob,-1 表示平局
bool samed;
while (t--) {
cin >> n >> m >> p;
turn = 1;
samed = 0;
while (1) {
if (operate(turn == 1 ? m : n, p)) {
if (samed) { // 这一轮没变,上一轮也没变
ans = -1;
break;
}
// 告诉下一轮:你的上一轮的值没变
samed = 1;
} else { // 这次值变了
samed = 0;
}
turn = (turn == 1 ? 2 : 1); // 下次让另一个人执行操作
// 判定胜利
if (n == 0) ans = 2;
if (m == 0) ans = 1;
if (n == 0 || m == 0) break;
}
switch (ans) {
case 1: cout << "Alice\n"; break;
case 2: cout << "Bob\n"; break;
default: cout << "Lasting Battle\n";
}
}
return 0;
}