| 比赛 |
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;
}