求hack
查看原帖
求hack
725327
chang_an_1029楼主2023/2/2 20:12

Rt

#include<bits/stdc++.h>
#define int long long
using namespace std;
//char buf[1<<18],*p1=buf,*p2=buf;
//#define getchar() (p1==p2&&(p1=buf,p2=p1+fread(buf,1,1<<18,stdin),p1==p2)?EOF:*p1++)
inline int read(){
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-') f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=x*10+ch-'0';
        ch=getchar();
    }
    return x*f;
}
inline void write(int x){
	if(x<0){
	    putchar('-');
	    x=-x;
    }
	if(x>9) write(x/10);
    putchar(x%10+'0');
}
int ans[100001];
set<int>setq,setq2;
signed main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	int T=read();
	while(T--){
		int n=read(),a=read(),b=read();
		if(!a&&!b){
			for(int i=1;i<=n;i++) write(i),putchar(' ');
			puts("");
			continue;
		}
		int ss=(1+n)*n/2,ss2=(1+n/2)*(n/2)/2;
		if(a+b>ss||max(a,b)>ss-ss2){
			puts("-1");
			continue;
		}
		setq2.clear();
		for(int i=1;i<=n;i++) setq.insert(i);
		int sum=0;
		for(int i=1;i<=n/2;i++){
			int resss=0,ttt=n;
			for(int j=n/2;j>=i;j--) resss+=ttt,ttt--;
			if(min(a,b)-sum>resss){
				int pt=n,summ=0;
				for(int j=n/2;j>=i;j--) ans[j]=pt,pt--;
				ans[i-1]=0;
				for(int j=1;j<=n/2;j++) summ+=ans[j];
				ans[i-1]=min(a,b)-summ;
				int xx=ans[i-1];
				while(setq2.count(xx)) xx++;
				ans[i-1]=xx;
				break;
			}
			if(i==n/2){
				int yy=min(a,b)-sum;
				if(yy<=0) goto st;
				while(setq2.count(yy)) yy++;
				ans[i]=yy;
				break;
			}
			st:
			ans[i]=i;
			setq2.insert(i);
			sum+=i;
		}
		int res1=0,res2=0;
		for(int i=1;i<=n/2;i++) setq.erase(ans[i]),res1+=ans[i];
		for(int i=n/2+1;i<=n;i++){
			int x=*setq.begin();
			setq.erase(x);
			ans[i]=x;
			res2+=x;
		}
		if((a<=b&&(res1<a||res2<b))||(a>b&&(res2<a||res1<b))){
			puts("-1");
			continue;
		}
		if(a<b) for(int i=1;i<=n;i++) write(ans[i]),putchar(' ');
		else for(int i=n;i>=1;i--) write(ans[i]),putchar(' ');
		puts("");
	}
	return 0;
}
/*
20 100 100
1   2   3   4 
1   3   6   10 
99  97  94  90
*/

个人感觉每行代码都是在拆东墙补西墙,但是A了

2023/2/2 20:12
加载中...