比赛 2026.8.26 评测结果 AAAAAAATTTTTTTTTTTTT
题目名称 merge 最终得分 35
用户昵称 rzzakioi 运行时间 27.598 s
代码语言 C++ 内存使用 10.57 MiB
提交时间 2026-08-26 11:19:34
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int t,n,a[505],s[505],h[505][505];
bool b[505];
bool f[505][505];
struct node{
    int l1,l2,m1,m2,r1,r2;
}g[505][505];
void print(int l,int r){
    if(l==r)return;
    int ans1=0,ans2=0,ans3=0;
    if(g[l][r].l1!=g[l][r].l2){
        print(g[l][r].l1,g[l][r].l2);
    }
    for(int i=g[l][r].l1+1;i<=g[l][r].l2;i++)b[i]=1;
    for(int i=1;i<=g[l][r].l1;i++){
        if(!b[i])ans1++;
    }
    if(g[l][r].m1!=g[l][r].m2){
        print(g[l][r].m1,g[l][r].m2);
    }
    for(int i=g[l][r].m1+1;i<=g[l][r].m2;i++)b[i]=1;
    for(int i=1;i<=g[l][r].m1;i++){
        if(!b[i])ans2++;
    }
    if(g[l][r].r1!=g[l][r].r2){
        print(g[l][r].r1,g[l][r].r2);
    }
    for(int i=g[l][r].r1+1;i<=g[l][r].r2;i++)b[i]=1;
    for(int i=1;i<=g[l][r].r1;i++){
        if(!b[i])ans3++;
    }
    printf("%d %d %d\n",ans1,ans2,ans3);
}
int main(){
    freopen("mergeegrem.in","r",stdin);
    freopen("mergeegrem.out","w",stdout);
    scanf("%d",&t);
    while(t--){
        memset(b,0,sizeof(b));
        memset(s,0,sizeof(s));
        memset(f,0,sizeof(f));
        memset(g,0,sizeof(g));
        memset(h,0,sizeof(h));
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
            s[i]=s[i-1]^a[i];
        }
        for(int i=1;i<=n;i++){
            f[i][i]=1;
            g[i][i]={i,i,i,i,i,i};
        }
        for(int len=2;len<=n;len++){
            for(int i=1;i+len-1<=n;i++){
                int j=i+len-1;
                for(int x1=i;x1<=j;x1++){
                    for(int x2=x1+1;x2<=j;x2++){
                        for(int x3=x2;x3<=j;x3++){
                            for(int x4=x3+1;x4<=j;x4++){
                                if(f[i][x1]&&f[x2][x3]&&f[x4][j]&&(s[x1]^s[i-1]^s[x3]^s[x2-1]^s[j]^s[x4-1])==0){
                                    f[i][j]=1;
                                    g[i][j]={i,x1,x2,x3,x4,j};
                                    h[i][j]=h[i][x1]+h[x2][x3]+h[x4][j]+1;
                                }
                            }
                        }
                    }
                }
            }
        }
        if(f[1][n]){
            printf("Huoyu\n%d\n",h[1][n]);
            print(1,n);
        }
        else printf("Shuiniao\n");
    }
    return 0;
}