题目描述
小D面前有 {n}n 个黑色的气球。
假设第 {i}i 个黑色气球的高度是一个正整数
h
i
h_i
hi,现在小D知道了任意两个不同气球的高度之和,你能帮小D还原出每个黑色气球的具体高度嘛?
输入描述:
第一行一个整数
n
{n}
n 接下来
n
{n}
n 行,每行
n
{n}
n 个整数,其中第
i
{i}
i 行第
j
{j}
j 个整数表示第
i
{i}
i 个气球和第
j
{j}
j 个气球的高度之和。(当
i
=
j
{i=j}
i=j 时这个数为
0
{0}
0)。
2
≤
n
≤
1000
2\le n\le 1000
2≤n≤1000 ,输入的每个数不超过
1
0
5
10^5
105 。数据保证答案唯一。
输出描述:
一行
n
{n}
n 个整数,表示答案。
保证答案唯一。
输入
5
0 3 4 5 6
3 0 5 6 7
4 5 0 7 8
5 6 7 0 9
6 7 8 9 0
输出
1 2 3 4 5
题解
- 简单公式推导,注意坑点, n = 2 n=2 n=2 时候,答案为 11 1 1 11
AC-Code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e3;
ll a[maxn+50];
int main(){
int n;
while(cin >> n){
ll sum = 0;
memset(a,0,sizeof a);
for(int i = 0 ; i < n ; ++i){
for(int j = 0 ; j < n ; ++j){
int c;
cin >> c;
a[i] += c;
}
sum += a[i];
}
if(n == 2){
cout << "1 1" << endl;
continue;
}
sum /= (n-1)*2;
for(int i = 0 ; i < n ; ++i)
cout << (a[i] - sum) / (n-2) << " ";
}
}