@[Hiraeth](/space/show?uid=99460) Orz
by mulberror @ 2019-04-09 20:49:58
```
#include<bits/stdc++.h>
using namespace std;
long long int b[4][4],a[16],v[16],N,f,s;
void print()
{
if(f)return;
printf("%d\n",s);
for(int i=0;i<N;i++,putchar(10))
for(int j=0;j<N;j++)
printf("%d ",b[i][j]);
f=1;
}
bool check()
{
int s1[4]={0},s2[4]={0},x=-100000000;
for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
s1[i]+=b[i][j],s2[j]+=b[i][j];
for(int i=0;i<N;i++)
if((s1[i]!=s&&s1[i]>=x)||(s2[i]!=s&&s2[i]>=x))return 0;
int l1=0,l2=0;
for(int i=0;i<N;i++)
l1+=b[i][i],l2+=b[i][N-1-i];
if((l1!=s&&l1>=x)||(l2!=s&&l2>=x))return 0;
return 1;
}
void dfs(int x,int y)
{
if(!check()||f)return;
if(x==N-1&&y==N-1&&check()){print();return;}
int nx=x+(y+1)/N,ny=(y+1)%N;
for(int i=0;i<N*N;i++)
if(!v[i])
v[i]=1,b[nx][ny]=a[i],dfs(nx,ny),b[nx][ny]=-500000000,v[i]=0;
}
int main()
{
scanf("%d",&N);
for(int i=0;i<N*N;i++)
scanf("%d",a+i),s+=a[i],b[i/N][i%N]=-500000000;
s/=N;
sort(a,a+N*N);
dfs(0,-1);
return 0;
}
```cpp
同上,我也莫名其妙死了。。。
by 什么叫中二呀 @ 2019-04-12 22:31:00
……~~查出脑残错误~~
好心人们帮忙再找一下错(WA3,4)
```cpp
#include<bits/stdc++.h>
using namespace std;
long long int b[5][5],a[100],v[100],N,f,s;
void print()
{
if(f)return;
printf("%lld",s);
for(int i=0;i<N;i++)
{
putchar(10);
for(int j=0;j<N;j++)
printf("%lld ",b[i][j]);
}
f=1;
}
bool check()
{
int s1[4]={0},s2[4]={0},x=-100000000;
for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
s1[i]+=b[i][j],s2[j]+=b[i][j];
for(int i=0;i<N;i++)
if((s1[i]!=s&&s1[i]>=x)||(s2[i]!=s&&s2[i]>=x))return 0;
int l1=0,l2=0;
for(int i=0;i<N;i++)
l1+=b[i][i],l2+=b[i][N-1-i];
if((l1!=s&&l1>=x)||(l2!=s&&l2>=x))return 0;
return 1;
}
void dfs(int x,int y)
{
if(!check()||f)return;
if(x==N-1&&y==N-1&&check()){print();return;}
int nx=x+(y+1)/N,ny=(y+1)%N;
for(int i=0;i<N*N;i++)
if(!v[i])
{
v[i]=1;
b[nx][ny]=a[i];
dfs(nx,ny);
b[nx][ny]=-500000000;
v[i]=0;
}
}
int main()
{
scanf("%lld",&N);
for(int i=0;i<N*N;i++)
{
scanf("%lld",a+i);
s+=a[i];
b[i/N][i%N]=-500000000;
}
s/=N;
sort(a,a+N*N);
dfs(0,-1);
return 0;
}
```
by 什么叫中二呀 @ 2019-04-12 23:32:03