比赛 2026.8.26 评测结果 RRRMMMRMMRRRMMMMRRRM
题目名称 merge 最终得分 0
用户昵称 郑霁桓 运行时间 2.979 s
代码语言 C++ 内存使用 1.94 MiB
提交时间 2026-08-26 12:51:22
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int T,n,a[500005],b[500005],vs[550];
struct vv{
    int a1,a2,a3;
};
vector<vv>v;
inline bool dfs(int x){
    if(x==1) return true;
    if(x==2) return false;
    for(int i=1;i<=x;i++){
        vs[a[i+1]]=i+1;
        int ps=a[i]^a[i+1];
        for(int j=i+2;j<=x;j++){
            ps^=a[j];
            if(vs[a[i]^a[j]]){
                v.push_back({i,vs[a[i]^a[j]],j});
                a[i]=ps;
                for(int k=i+1;k<=n-(j-i);k++) a[k]=a[j+k-i];
                if(dfs(x-(j-i))) return true;
                for(int k=i;k<=n-(j-i);k++) a[k]=b[k];
                v.pop_back();
            }
            vs[a[j]]=j;
        }
        for(int j=i+1;j<=x;j++) vs[a[j]]=0;
    }
    return false;
}
int main(){
    freopen("mergeegrem.in","r",stdin);
    freopen("mergeegrem.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>T;
    while(T--){
        cin>>n;
        v.clear();
        for(int i=0;i<=512;i++) vs[i]=0;
        for(int i=1;i<=n;i++) cin>>a[i];
        if(n>20||!dfs(n)) cout<<"Shuiniao\n";
        else{
            cout<<"Huoyu\n";
            cout<<v.size()<<"\n"; 
            for(int i=0;i<v.size();i++) cout<<v[i].a1<<" "<<v[i].a2<<" "<<v[i].a3<<"\n";
            cout<"\n"; 
        }
    }
    return 0;
}