题解:P16251 [蓝桥杯 2026 省研究生组] 基态坍缩
我们看了这题的算法标签发现是一道博弈题。
题目分析
只能操作最后一个节点,把它的能级降到比当前小的数;然后降到
主要思路
-
若最后一个节点能级
>1 时:先手必胜。 -
若最后一个节点
=1 时,往前找,直到找到第一个>1 的节点:- 若这个节点是偶数位,后手胜。
- 若这个节点是奇数位,先手胜。
-
所有节点都是
1 ,总个数为奇数时先手胜,偶数时后手胜。
接下来我们就得出代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
vector<int>a(n);
for(int i=0;i<n;i++)
{
cin>>a[i];
}
int cnt=0;
for(int i=n-1;i>=0;i--)
{
if(a[i]==1)
{
cnt++;
}
else
{
break;
}
}
if(cnt==n)
{
if(n%2==1)
{
cout<<"L"<<endl;
}
else
{
cout<<"Q"<<endl;
}
}
else
{
if((cnt+1)%2==1)
{
cout<<"L"<<endl;
}
else
{
cout<<"Q"<<endl;
}
}
}
return 0;
}