本文主要是介绍CodeForces 711B Chris and Magic Square,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
http://codeforces.com/problemset/problem/711/B
给一个n*n的矩阵,将其中一个0改成其他正数,使得每行每列2个对角线的和都相等,暴力即可,但是要注意如果得到的答案是一个负数,那么也算是不符合的情况。
#include<bits/stdc++.h>
using namespace std; long long int a[555][555];long long int b[555];long long int c[555];
int main(){int n;long long int zx;long long int yx;while(scanf("%d",&n)!=EOF){zx=0;yx=0;int i,j;int u,v;memset(b,0,sizeof(b));memset(c,0,sizeof(c));for(i=1;i<=n;i++){for(j=1;j<=n;j++){scanf("%I64d",&a[i][j]);b[i]+=a[i][j];c[j]+=a[i][j];if(a[i][j]==0){u=i;v=j;}if(i==j)zx+=a[i][j];if(i==n+1-j)yx+=a[i][j];}} if(n==1){cout<<"1"<<endl;continue;}else {bool flag=0;long long int th;if(u==1){th=b[2]-b[1];if(th<0)flag=1;b[u]+=th;c[v]+=th;if(u==v)zx+=th;if(u+v==n+1)yx+=th;}else {th=b[u-1]-b[u];if(th<0)flag=1;b[u]+=th;c[v]+=th;if(u==v)zx+=th;if(u+v==n+1)yx+=th;}if(zx!=yx)flag=1;for(i=2;i<=n;i++){if(b[i]!=b[i-1])flag=1;if(c[i]!=c[i-1])flag=1;}if(zx!=b[1])flag=1;if(flag==0&&th>0)cout<<th<<endl;else cout<<"-1"<<endl;}}return 0;
}
这篇关于CodeForces 711B Chris and Magic Square的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!