$\texttt{60 pts}$ 求助
  • 板块P1406 方格填数
  • 楼主Elgo87
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/11/13 08:16
  • 上次更新2023/11/4 00:45:20
查看原帖
$\texttt{60 pts}$ 求助
393864
Elgo87楼主2021/11/13 08:16

评测记录:

AC AC WA AC TLE

有无大佬帮忙看看代码

#include<bits/stdc++.h>
using namespace std;

int a[25],n,vis[25];
bool is_ok(int arr[],int& b)
{
	int base=-1;
	for(int i=1; i<=n; i++)
	{
		int line=0;
		for(int j=1; j<=n; j++)
			line+=arr[(i-1)*n+j];
		if(base!=-1 && line!=base) return false;
		base=line;
	}
	for(int i=1; i<=n; i++)
	{
		int cols=0;
		for(int j=1; j<=n; j++)
			cols+=arr[i+(j-1)*n];
		if(base!=-1 && cols!=base) return false;
		base=cols;
	}
	int left=0,right=0;
	for(int i=1; i<=n; i++)
	{
		left+=arr[(n+1)*i-3];
		right+=arr[n*(n-i)+i];
	}	
	if(left!=base || right!=base)
		return false;
	b=base;
	return true;
}

void dfs(int idx,int s[])
{
	if(idx>n*n)
	{
		int x=0;
		if(is_ok(s,x))
		{
			cout<<x<<endl;
			for(int i=1; i<=n; i++)
			{
				for(int j=1; j<=n; j++) 
					cout<<s[(i-1)*n+j]<<' ';
				puts("");				
			}

			exit(0);
		}
	}
	else
	{
		for(int i=1; i<=n*n; i++)
		{
			if(!vis[i])
			{
				vis[i]=1;
				s[idx]=a[i];
				dfs(idx+1,s);
				s[idx]=0;		
				vis[i]=0;		
			}

		}
	}
}

int main()
{
	cin>>n;
	for(int i=1; i<=n*n; i++)
		cin>>a[i];
	sort(a+1,a+n*n+1);
	int s[100]={};
	dfs(1,s);
    return 0;
}
2021/11/13 08:16
加载中...