题解:P16251 [蓝桥杯 2026 省研究生组] 基态坍缩
一道十分基础的博弈论。
我们可以采用逆向思维,考虑每个节点在成为末端节点时的先手胜负状态。我们定义
我们从最后一个节点开始递推:
当节点
如果
如果
所以我们可以从
注:当节点
由逆向思维得出递推关系后,我们要用正向递推实现,因为递推关系是依赖于
最后贴出我丑陋的代码:
#include <iostream>
#include <vector>
using namespace std;
int t;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> t;
while (t--) {
int n;
cin >> n;
vector<int> f(n);
for (int i = 0; i < n; i++) {
cin >> f[i];
}
bool w = 1;
for (int i = 1; i < n; i++) {
if (f[i] == 1) {
w = !w;
}
else {
w = 1;
}
}
cout << (w ? "L" : "Q") << "\n";
}
return 0;
}