求助!第一个点RE P1406
查看原帖
求助!第一个点RE P1406
928435
laoliubazicode楼主2023/7/4 14:48
#include<bits/stdc++.h>
using namespace std;
long long n,bn[5005],zs,flag,s1[5005],m;
bool s2[5005];
void dfs(int nzs,bool op[5005],int bj,long long sl[5005])
{
	if(flag)return;
	if(bj-1==n)
	{
		int dzs=0;
		for(int i=1;i<=m;i++)
		{
			dzs=0;
			for(int j=1;j<=m;j++)
			dzs+=sl[(j-1)*m+i];
			if(dzs!=zs)return;
		}
		dzs=0;
		for(int i=1;i<=m;i++)
			dzs+=sl[(i-1)*m+i];
		if(dzs!=zs)return;
		dzs=0;
		for(int i=1;i<=m;i++)
			dzs+=sl[(i-1)*m+(m-i+1)];
		if(dzs!=zs)return;
		flag=1;
		for(int i=1;i<=m;i++)
		{
			for(int j=1;j<=m;j++)
				cout<<sl[(i-1)*m+j]<<" ";
			cout<<endl;
		}
		exit(0);
	}
	if(nzs%zs!=0&&(bj-1)%m==0)return;
	for(int i=1;i<=n;i++)
	if(!op[i])
	{
		op[i]=true;
		sl[bj]=bn[i];
		dfs(nzs+sl[bj],op,bj+1,sl);
		op[i]=false;
		sl[bj]=0;
	}
 }  
int main()
{
	cin>>n;
	for(int i=1;i<=n*n;i++)
	{
		cin>>bn[i];
		zs+=bn[i];
	}
	zs/=n;
	m=n;
	cout<<zs<<endl;
	if(n==0)return 0;
	if(n==1){
		cout<<zs;
		return 0;
	}
	n*=n;
	sort(bn+1,bn+n+1);
	dfs(0,s2,1,s1);
	return 0;
}

提交记录

2023/7/4 14:48
加载中...