题目传送门
题目描述
小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) << " ";}
}