题意:给出N,下面N行N列输入。其中有一个位置是0,找出一个正整数使得行列对角线和相等
比赛时候没看到对角线的事WA的惨烈啊
#include <iostream>
#include <stdio.h>
using namespace std;
long long a[505][505];
long long sum1[505];
long long sum2[505];
int main()
{
int n;
cin>>n;
if(n==1)
{
int t;
cin>>t;
printf("1\n");
return 0;
}
long long flag1,flag2,flag,tep1,xx=0,gg=0;
for(int i=1;i<=n;i++)
{ flag=0;
for(int j=1;j<=n;j++)
{
scanf("%lld",&a[i][j]);
if(a[i][j]==0)
{
flag=1;
flag1=i;
flag2=j;
}
sum1[i]+=a[i][j];
}
if(flag==0)
{
if(xx==0)
{
tep1=sum1[i];
xx=1;
}
if(sum1[i]!=tep1)
gg=1;
}
}
// printf("%d %d \n",flag1,flag2);
if(gg==1)
{
printf("-1\n");
return 0;
}
long long tep2=0,yy=0;
for(int j=1;j<=n;j++)
{
flag=0;
for(int i=1;i<=n;i++)
{
if(a[i][j]==0)
{
flag=1;
}
sum2[j]+=a[i][j];
}
if(flag==0)
{
if(yy==0)
{
tep2=sum2[j];
yy=1;
}
if(sum2[j]!=tep2)
gg=1;
}
}
// printf("%d\n",tep2);
if(gg==1)
{
printf("-1\n");
return 0;
}
long long ss=0;
for(int j=1;j<=n;j++)
ss+=a[flag1][j];
// printf("ss=%d\n",tep1);
//printf("%dgg\n",a[flag1][flag2]);
a[flag1][flag2]=tep1-ss;
// printf("%d\n",a[flag1][flag2]);
if(a[flag1][flag2]<=0)
{
printf("-1\n");
return 0;
}
if(tep1==tep2)
{
long long suma=0,sumb=0;
for(int i=1;i<=n;i++)
suma+=a[i][i];
for(int i=1;i<=n;i++)
sumb+=a[i][n-i+1];
//printf("%lld %lld",suma,sumb);
if(suma==sumb&&suma==tep1)
printf("%lld\n",a[flag1][flag2]);
else
printf("-1\n");
}
else
printf("-1\n");
return 0;
}