#2 TLE 求调
查看原帖
#2 TLE 求调
418601
Typed_SIGTERM楼主2023/12/31 23:01

重构后就寄了 /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;
}
2023/12/31 23:01
加载中...