求助 只有第六个点TLE 不知道怎么回事
查看原帖
求助 只有第六个点TLE 不知道怎么回事
273923
ningsining楼主2022/10/12 17:06
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int n,sum[1000],buc[500010],a[1000];
int main() {
	while(scanf("%d",&n)!=EOF) {
		memset(buc,0,sizeof(buc));
		memset(a,0,sizeof(a));
		memset(sum,0,sizeof(sum));
		int m=n*(n-1)/2;
		for(int i=1; i<=m; i++) scanf("%d",&sum[i]),buc[sum[i]]++;
		sort(sum+1,sum+m+1);
		int st;
		bool flag;
		for(int k=0; k<=sum[1]/2; k++) {
			memset(buc,0,sizeof(buc));
			for(int i=1; i<=m; i++) buc[sum[i]]++;
			st=0;
			flag=true;
			a[1]=k;
			for(int i=2; i<=n; i++) {
				while(buc[st]==0) st++;
				a[i]=st-a[1];
				if(a[i]<a[i-1]) {
					flag=false;
					break;
				}
				for(int j=1; j<i; j++) {
					if(buc[a[i]+a[j]]>0) buc[a[i]+a[j]]--;
					else {
						flag=false;
						break;
					}
				}
				if(!flag) break;
			}
			if(flag) {
				for(int i=1; i<=n; i++) printf("%d ",a[i]);
				printf("\n");
				break;
			}
		}
		if(!flag) printf("Impossible\n");
	}
}
2022/10/12 17:06
加载中...