比赛的时候绝壁打麻烦了。。。

考虑的好麻烦。。。wa7。。。还要判断出来的是不是positive的。。。

好吧。。认了。。

#include<cstdio>
#include <map>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std; typedef __int64 LL; const int N=5e2+10; LL ma[N][N];
LL row[N];
LL col[N];
LL s1,s2;
int n; int main()
{
memset(row,0,sizeof(row));
memset(col,0,sizeof(col));
s1=s2=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%I64d",&ma[i][j]);
//1的话随便
if(n==1)
{
if(!ma[1][1])
puts("1");
else
printf("%I64d\n",ma[1][1]);
return 0;
} //找到0位置
int x=-1,y=-1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
if(!ma[i][j])
{
x=i;
y=j;
break;
}
if(x!=-1)
break;
}
//printf("%d %d\n",x,y); for(int i=1;i<=n;i++)
{
if(i!=x)
{
for(int j=1;j<=n;j++)
row[i]+=ma[i][j];
}
}
for(int j=1;j<=n;j++)
{
if(j!=y)
{
for(int i=1;i<=n;i++)
col[j]+=ma[i][j];
}
}
//斜的
//顺的
if(x!=y)
{
for(int i=1;i<=n;i++)
{
s1+=ma[i][i];
}
}
//逆的
if(x+y!=n+1)
for(int i=1;i<=n;i++)
{
s2+=ma[i][n-i+1];
} if(x!=y&&x+y!=n+1)
if(s1!=s2)
{
puts("-1");
return 0;
}
//横的
LL temp1,temp2;
for(int i=1;i<=n;i++)
{
if(i!=x)
{
temp1=row[i];
break;
}
}
for(int i=1;i<=n;i++)
{
if(i!=x)
{
if(temp1!=row[i]||(s1!=row[i]&&x!=y)||(s2!=row[i]&&x+y!=n+1))
{
//printf("here?\n");
puts("-1");
return 0;
}
}
}
//竖的
for(int i=1;i<=n;i++)
{
if(i!=y)
{
temp1=col[i];
break;
}
}
for(int i=1;i<=n;i++)
{
if(i!=y)
{
if(temp1!=col[i]||(x!=y&&s1!=col[i])||(s2!=col[i]&&x+y!=n+1))
{
puts("-1");
return 0;
}
}
}
temp2=temp1;
//求一个
//printf("temp1=%I64d\n",temp1);
for(int i=1;i<=n;i++)
{
if(i==x)
{
for(int j=1;j<=n;j++)
{
if(ma[i][j])
temp1-=ma[i][j];
}
ma[x][y]=temp1;
break;
}
}
LL k1,k2,k3,k4;
temp1=temp2;
k1=0;
k2=0;
k3=0;
k4=0;
for(int i=1;i<=n;i++)
k1+=ma[x][i];
for(int i=1;i<=n;i++)
k2+=ma[i][y];
if(k1!=temp1||k2!=temp2||k1!=k2)
{
//printf("here?\n");
puts("-1");
return 0;
}
if(x==y)
{
for(int i=1;i<=n;i++)
k3+=ma[i][i];
if(k3!=k2)
{
puts("-1");
return 0;
}
}
if(x+y==n+1)
{
for(int i=1;i<=n;i++)
k4+=ma[i][n+1-i];
if(k4!=k2)
{
puts("-1");
return 0;
}
}
if(ma[x][y]>0)
printf("%I64d\n",ma[x][y]);
else
puts("-1");
return 0;
} /*
4
1 1 1 1
1 1 0 1
1 1 1 1
1 1 1 1
*/

最新文章

  1. 【五子棋AI循序渐进】关于VCT,VCF的思考和核心代码
  2. UVa11292
  3. Failed to initialize monitor Thread: Unable to establish loopback connection解决方法
  4. 一个简单的hibernate项目
  5. iOS之手势滑动返回功能-b
  6. div+css+javascript 走马灯图片轮换显示
  7. Django中下划线的用法介绍(一)
  8. Linux系统的基本使用
  9. NFC Spy:基于Android 4.4及以上手机的非接智能卡跟踪仪
  10. httpie的使用
  11. 7.4 C++标准模板库(STL)的概念
  12. Hive函数以及自定义函数讲解(UDF)
  13. Python2.7-sched
  14. Ora-01536:超出了表空间users的空间限量
  15. ES6之6种遍历对象属性的方法
  16. cdoj第13th校赛初赛F - Fabricate equation
  17. python - multi-mechanize 安装笔记
  18. 给iOS开发新手送点福利,简述UIActivityIndicatorView的属性和用法
  19. Android自定义view与activity的传值
  20. JS中使用正则表达式

热门文章

  1. linux 进程间通信之 消息队列
  2. invlpg 指令简单介绍
  3. vmware Unable to open kernel device &quot;\\.\Global\vmx86&quot;: The system cannot find the file 的解决方法
  4. 图片3d轮放查看效果(V2.0):使用鼠标拖动实现图片的轮放
  5. 使用mysql导入数据时关掉binlog
  6. mysql中修改表字段名/字段长度/字段类型详解
  7. 文件管理中心iOS版简介
  8. 小程序登录方式切换 不做url跳转
  9. (linux)自旋锁及其衍生锁
  10. CentOS7 安装和配置 mysql5.7