E
  • 板块学术版
  • 楼主Or1gam1
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/12/31 17:44
  • 上次更新2023/12/31 19:59:56
查看原帖
E
252567
Or1gam1楼主2023/12/31 17:44
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int t,n,a[N],b[N];
bool check(){
	for(int i=1;i<=n;i++){
		for(int j=i;j<=n;j++){
			int res1=0,res2=0;
			for(int k1=i;k1<=j;k1++) res1+=a[k1],res2+=b[k1];
			if(res1==res2) return 0;
		}
	}
	return 1;
}
bool flag=0;
void bf(int cur){
	if(flag) return;
	if(cur>n){
		if(check()){
			for(int i=1;i<=n;i++) printf("%d ",b[i]);
			puts("");
			flag=1;
		}
		return;
	}
	for(int i=1;i<=n;i++){
		b[cur]=i;
		bf(cur+1);
		b[cur]=0;
	}
}
signed main(){
	scanf("%d",&t);
	while(t--){
		scanf("%d",&n);a[n+1]=0;
		if(n<=4){
			for(int i=1;i<=n;i++) scanf("%d",&a[i]);
			flag=0;bf(1);
			if(!flag) puts("-1");
			continue;
		}
		int res1=0,res2=0,res3=0,res4=0;
		for(int i=1;i<=n;i++) scanf("%d",&a[i]);
		for(int i=1;i<=n;i++)
			if(a[i]==n)
				res1=a[i-1],res2=a[i+1],i-2>=0?res3=a[i-2]:res3=0,res4=a[i+2];
		int res=0;
		for(int i=n;i>=1;i--)
			if(i!=res1&&i!=res2&&i!=n&&res1+res2!=i+n&&res1+res3!=i+n&&res2+res4!=i+n){
				res=i;
				break;
			}
		if(!res) puts("-1");
		else{
			for(int i=1;i<=n;i++){
				if(a[i]!=n) printf("%d ",n);
				else printf("%d ",res);
			}
			puts("");
		}
	}
    return 0;
}

这个过了,是不是乱搞

2023/12/31 17:44
加载中...