| 比赛 |
2026.8.26 |
评测结果 |
AAAAAAAAATTTTTTTTTTT |
| 题目名称 |
merge |
最终得分 |
45 |
| 用户昵称 |
2_16鸡扒拌面 |
运行时间 |
23.851 s |
| 代码语言 |
C++ |
内存使用 |
3.82 MiB |
| 提交时间 |
2026-08-26 12:39:57 |
显示代码纯文本
#include <bits/stdc++.h>
#define SNSNMO 110
using namespace std;
struct Op{
int i,j,k;
};
int n;
vector<int> a0;
vector<Op> ans;
bool ok;
unordered_set<string> vis;
int xr(const vector<int>& v,int l,int r){
int res=0;
for(int i=l;i<=r;i++) res^=v[i];
return res;
}
bool check(const vector<int>& v0,const vector<Op>& ops)
{
vector<int> v=v0;
for(auto &op:ops)
{
int i=op.i-1,j=op.j-1,k=op.k-1,m=v.size();
if(i<0||j<0||k<0||i>=m||j>=m||k>=m) return false;
if(i>=j||j>=k) return false;
if((v[i]^v[j]^v[k])!=0) return false;
int s=xr(v,i,k);
vector<int> nv;
for(int t=0;t<i;t++) nv.push_back(v[t]);
nv.push_back(s);
for(int t=k+1;t<m;t++) nv.push_back(v[t]);
v=nv;
}
return v.size()==1;
}
string enc(const vector<int>& v)
{
string s;
for(int x:v)
{
s+=to_string(x);
s+=',';
}
return s;
}
void dfs(vector<int>& v,vector<Op>& ops)
{
if(ok) return;
string key=enc(v);
if(vis.count(key)) return;
vis.insert(key);
int m=v.size();
if(m==1)
{
if(check(a0,ops))
{
ok=true;
ans=ops;
}
return;
}
for(int i=0;i<m;i++)
for(int j=i+1;j<m;j++)
for(int k=j+1;k<m;k++)
{
if((v[i]^v[j]^v[k])==0)
{
int s=xr(v,i,k);
vector<int> nv;
for(int t=0;t<i;t++) nv.push_back(v[t]);
nv.push_back(s);
for(int t=k+1;t<m;t++) nv.push_back(v[t]);
ops.push_back({i+1,j+1,k+1});
dfs(nv,ops);
ops.pop_back();
if(ok) return;
}
}
}
int main()
{
freopen("mergeegrem.in","r",stdin);
freopen("mergeegrem.out","w",stdout);
int T;
cin>>T;
while(T--)
{
cin>>n;
a0.resize(n);
for(int i=0;i<n;i++) cin>>a0[i];
ok=false;ans.clear();vis.clear();
vector<Op> ops;
vector<int> v=a0;
dfs(v,ops);
if(!ok)
cout<<"Shuiniao\n";
else
{
cout<<"Huoyu\n";
cout<<ans.size()<<"\n";
for(auto &op:ans) cout<<op.i<<" "<<op.j<<" "<<op.k<<"\n";
}
}
return 0;
}