C - Chris and Magic Square CodeForces - 711B
2018-03-27 22:54
513 查看
题目链接https://cn.vjudge.net/contest/218567#problem/C题意很好理解,找出一个值代替0,使得这个矩阵里的数,每行的和,每列的和,俩主对角线上的数的和都相等 ///就是有一个范围注意一下 1<=x<=1e18,实际上>=1就行了,数值不会超过1e18,比赛时就是这个范围这个样例输出-1
3 3 8 1 2 4 6 7 0 5#include<cstdio>#include<cmath>#include<cstring>#include<iostream>#include<algorithm>using namespace std;typedef long long ll;ll a[555][555];int main(){int n;while(~scanf("%d",&n)){int nx,ny;memset(a,0,sizeof(a));for(int i=0;i<n;i++){for(int j=0;j<n;j++){cin>>a[i][j];if(a[i][j]==0){nx=i;ny=j;}}}if(n==1) printf("1\n");else{ll lie0=0;//0在的那行的所有值的和for(int j=0;j<n;j++)lie0+=a[nx][j];ll lie=0;//一非0行所有值的和for(int i=0;i<n;i++){if(i!=nx){for(int j=0;j<n;j++){lie+=a[i][j];}break;}}ll ans1=lie-lie0;//找到一个待定答案a[nx][ny]=ans1;int ff=0;for(int i=0;i<n;i++){ll tempx=0;for(int j=0;j<n;j++){tempx+=a[i][j];}if(tempx!=lie)ff=1;//判断每行是否满足}for(int j=0;j<n;j++){ll tempy=0;for(int i=0;i<n;i++)tempy+=a[i][j];if(tempy!=lie) ff=1;//判断每列}ll xie1=0,xie2=0;//两条主对角线for(int i=0;i<n;i++){xie1+=a[i][i];xie2+=a[i][n-i-1];}if(xie1!=lie||xie2!=lie) ff=1;if(ff==0&&ans1>=1&&ans1<=1e18) cout<<ans1<<endl;else cout<<"-1"<<endl;}}}
相关文章推荐
- C - Chris and Magic Square CodeForces - 711B
- Codeforces Round #369 (Div. 2) B. Chris and Magic Square
- codeforces 711B - Chris and Magic Square(矩阵0位置填数)
- codeforces#369Div2(711B)Chris and Magic Square
- CodeForces 711B - Chris and Magic Square
- Codeforces 711B- Chris and Magic Square
- codeforces 711B. Chris and Magic Square【模拟】
- 【codeforces 711B】Chris and Magic Square
- Chris and Magic Square CodeForces - 711B
- Codeforces 711B. Chris and Magic Square
- CodeForces 711B. Chris and Magic Square(水题)
- Codeforces Round #157 (Div. 2) B. Little Elephant and Magic Square
- 模拟-711B - Chris and Magic Square
- Chris and Magic Square
- Chris and Magic Square
- codeforces 711B B. Chris and Magic Square(水题)
- Codeforces #369(Div.2)B.Chris and Magic Square【思维】
- B. Chris and Magic Square
- cf369 B Chris and Magic Square
- 文章标题 Chris and Magic Square