| Run ID | 作者 | 问题 | 语言 | 测评结果 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|
| 91843 | sh25_shenpy | 高僧斗法 | C++ | 通过 | 0 MS | 260 KB | 1195 | 2026-06-17 19:24:02 |
#include <bits/stdc++.h> using namespace std; bool is_win(vector<int>& b) { // 当前石子数量为 b 数组情况下先手能赢则为 ture。 int sum = 0; for (int i = 0; i < (int)b.size(); i += 2) { // 只需算奇数层的异或和,所以 i += 2。 sum ^= b[i]; } return sum != 0; } int main() { int n; vector<int> a; while (cin >> n) { a.push_back(n); } n = a.size(); vector<int> b(n - 1); for (int i = 0; i < n - 1; i++) b[i] = a[i + 1] - a[i] - 1; if (!is_win(b)) cout << -1 << endl; // 先手不能赢则直接输出 -1。 else { for (int i = 0; i < n - 1; i++) { for (int j = 1; j <= a[i + 1] - a[i] - 1; j++) { if (i & 1) { b[i - 1] += j; // 相当于当前阶梯石子移动 j 个到前一个阶梯。 if (!is_win(b)) { // 刚才的后手是现在的先手,他得输。 cout << a[i] << ' ' << a[i] + j << endl; return 0; } b[i - 1] -= j; // 还原原来的状态,除非前面已经得出了答案。 } else { b[i] -= j; if (!is_win(b)) { cout << a[i] << ' ' << a[i] + j << endl; return 0; } b[i] += j; } } } } return 0; }