关闭

水题-Codeforces Round #369 Div.2-B

348人阅读 评论(0) 收藏 举报
分类:

B. Chris and Magic Square
time limit per test2 seconds
memory limit per test256 megabytes
inputstandard input
outputstandard output
ZS the Coder and Chris the Baboon arrived at the entrance of Udayland. There is a n × n magic grid on the entrance which is filled with integers. Chris noticed that exactly one of the cells in the grid is empty, and to enter Udayland, they need to fill a positive integer into the empty cell.

Chris tried filling in random numbers but it didn’t work. ZS the Coder realizes that they need to fill in a positive integer such that the numbers in the grid form a magic square. This means that he has to fill in a positive integer so that the sum of the numbers in each row of the grid (), each column of the grid (), and the two long diagonals of the grid (the main diagonal — and the secondary diagonal — ) are equal.

Chris doesn’t know what number to fill in. Can you help Chris find the correct positive integer to fill in or determine that it is impossible?

Input
The first line of the input contains a single integer n (1 ≤ n ≤ 500) — the number of rows and columns of the magic grid.

n lines follow, each of them contains n integers. The j-th number in the i-th of them denotes ai, j (1 ≤ ai, j ≤ 109 or ai, j = 0), the number in the i-th row and j-th column of the magic grid. If the corresponding cell is empty, ai, j will be equal to 0. Otherwise, ai, j is positive.

It is guaranteed that there is exactly one pair of integers i, j (1 ≤ i, j ≤ n) such that ai, j = 0.

Output
Output a single integer, the positive integer x (1 ≤ x ≤ 1018) that should be filled in the empty cell so that the whole grid becomes a magic square. If such positive integer x does not exist, output  - 1 instead.

If there are multiple solutions, you may print any of them.

Examples
input
3
4 0 2
3 5 7
8 1 6
output
9
input
4
1 1 1 1
1 1 0 1
1 1 1 1
1 1 1 1
output
1
input
4
1 1 1 1
1 1 0 1
1 1 2 1
1 1 1 1
output
-1
Note
In the first sample case, we can fill in 9 into the empty cell to make the resulting grid a magic square. Indeed,

The sum of numbers in each row is:

4 + 9 + 2 = 3 + 5 + 7 = 8 + 1 + 6 = 15.

The sum of numbers in each column is:

4 + 3 + 8 = 9 + 5 + 1 = 2 + 7 + 6 = 15.

The sum of numbers in the two diagonals is:

4 + 5 + 6 = 2 + 5 + 8 = 15.

In the third sample case, it is impossible to fill a number in the empty square such that the resulting grid is a magic square.


题意:
给一个n*n的矩阵,里面有且只有一个0,其他都是正整数,先求是否存在一个可以填在0位置的数,使得矩阵的每行之和与每列之和与两个对角线之和都相等。


题解:
直接求值后check就可以了,然而FST了,因为数据中有除了0所在的行、列外,其他本身就不符合的行/列。


//
//  main.cpp
//  cf-369-2-2
//
//  Created by 袁子涵 on 16/8/29.
//  Copyright © 2016年 袁子涵. All rights reserved.
//

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <map>

using namespace std;
const int maxn=505;
long long int n,num[maxn][maxn],x,y,nowx,total,tmp,tmp1,tmp2;
int main(int argc, const char * argv[]) {
    cin >> n;
    for (int i=1; i<=n; i++) {
        for (int j=1; j<=n; j++) {
            cin >> num[i][j];
            if (num[i][j]==0) {
                x=i,y=j;
            }
        }
    }
    if (n==1) {
        cout << 1 << endl;
        return 0;
    }
    if (x==1) {
        nowx=n;
    }
    else
    {
        nowx=1;
    }
    total=0;
    for (int i=1; i<=n; i++) {
        total+=num[nowx][i];
    }
    tmp=0;
    for (int i=1; i<=n; i++) {
        if (i==y) {
            continue;
        }
        else
        {
            tmp+=num[x][i];
        }
    }
    if (total-tmp<=0) {
        cout << -1 << endl;
        return 0;
    }
    num[x][y]=total-tmp;
    tmp=0;
    bool flag=1;
    for (int i=1; i<=n; i++) {
        tmp+=num[i][y];
    }
    if (tmp!=total) {
        flag=0;
    }
    tmp=0;
    for (int i=1; i<=n; i++) {
        tmp+=num[i][i];
    }
    if (tmp!=total) {
        flag=0;
    }
    tmp=0;
    for (int i=1; i<=n; i++) {
        tmp+=num[i][n-i+1];
    }
    if (tmp!=total) {
        flag=0;
    }
    for (int i=1; i<=n; i++) {
        tmp1=tmp2=0;
        for (int j=1; j<=n; j++) {
            tmp1+=num[i][j];
            tmp2+=num[j][i];
        }
        if (tmp1!=tmp2 || tmp1!=total || tmp2!=total) {
            flag=0;
            break;
        }
    }
    if (flag) {
        cout << num[x][y] << endl;
    }
    else
        cout << -1 << endl;
    return 0;
}
0
0
查看评论

水题-Codeforces Round #369 Div.2-A

A. Bus to Udayland time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard output ZS the Coder and Chr...
  • Roy_Yuan
  • Roy_Yuan
  • 2016-08-30 22:31
  • 194

CodeForces-787B(题目不好读懂,懂了题目就发现是水题,感觉自己棒棒哒)

CodeForces-787B(题目不好读懂,懂了题目就发现是水题,感觉自己棒棒哒) 题目链接 题目大意:我做这个题的时候读了半个小时题才明白要干什么,哎。题意就是给出n个宇宙,m个小组,下面的m行每行第一个给出该小组成员的人数num,然后接着给出每个成员来自哪个星球,互为相反数的来自一个星球,其中...
  • V32122
  • V32122
  • 2017-08-25 20:32
  • 199

Codeforces Round #369

A题一个大水题,就是找字符串里有没有两个连续的O,如果有把OO改成++ 代码如下:#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include&l...
  • infinity_edge
  • infinity_edge
  • 2016-08-30 15:09
  • 165

Codeforces Round #258 (Div. 2)-(A,B,C,D,E)

A:Game With Sticks 水题。。。每次操作,都会拿走一个横行,一个竖行。 所以一共会操作min(横行,竖行)次。 #include #include #include #include #include #include #include #include #pragma commen...
  • rowanhaoa
  • rowanhaoa
  • 2014-07-25 14:39
  • 1486

Educational Codeforces Round 27

A 题意:把2 * n个人分成两组,使得无论两组的人怎么进行比赛 第一组的人始终都要保持全赢,如果两个人能力值相等两人都可以赢 思路:排序后只要保证n + 1个人的能力值大于第n个人的能力值即可 #include #include #include #include #include #i...
  • sasuke__
  • sasuke__
  • 2017-08-23 10:35
  • 206

【解题报告】Codeforces Round #401 (Div. 2)

简略的解题报告。
  • TRiddle
  • TRiddle
  • 2017-02-25 17:55
  • 417

Codeforces 746C Tram(水题)

Tram time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output The t...
  • zwj1452267376
  • zwj1452267376
  • 2016-12-19 02:35
  • 390

Codeforces Round #374 (Div. 2) 终场翻盘记

讲道理这场cf本来是不想打的,因为感觉时间有点晚(主要还是国庆作业爆表了)。。后来不知道为什么还是决定打了。        开场前发现注册人数又8000+,(为什么我一打比赛就8000+啊)        挂了个vpn冷...
  • lych_cys
  • lych_cys
  • 2016-10-01 09:48
  • 737

Codeforces Round #460 (Div. 2)题目题解

A.Supermarket (水题) #include #include #include #include #include using namespace std; int main() { int N,M; double ans = 99999999;...
  • wyxeainn
  • wyxeainn
  • 2018-01-31 23:17
  • 83

codeforces 237/A 一道水题的感悟。。。。

http://codeforces.com/problemset/problem/237/A Valera runs a 24/7 fast food cafe. He magically learned that next day n people will visi...
  • u013573047
  • u013573047
  • 2014-04-08 17:57
  • 707
    个人资料
    • 访问:51014次
    • 积分:1967
    • 等级:
    • 排名:千里之外
    • 原创:154篇
    • 转载:0篇
    • 译文:0篇
    • 评论:4条
    最新评论