Run ID 作者 问题 语言 测评结果 时间 内存 代码长度 提交时间
91843 sh25_shenpy 高僧斗法 C++ 通过 0 MS 260 KB 1195 2026-06-17 19:24:02

Tests(5/5):


#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; }


测评信息: