Problem B: SUME
Time Limit: 1 Sec Memory Limit: 32 MBSubmit: 6 Solved: 5
[ Submit][ Status][ Web Board]
Description
Once upon a time, there existed a sequence A consisting of N positive integers. You don't know the
sequence itself, but you do know the sum of every two elements of the sequence. Find the sequence A!
Input
The first line of input contains the positive integer N (2 ≤ N ≤ 1000).
Each of the following N lines contains N positive integers smaller than or equal to 100 000, forming
the table S. The following relations hold: S(i, j) = A [i] + A [j] for i ≠ j, and S(i, j) = 0 for i = j. Here S(i,
j) denotes the number in the ith row and jth column of the table, and A [i] denotes the ith element of the
sequence A.
It is guaranteed that for any input data set there exists a unique sequence of positive integers A with
the given properties.
Output
The first and only line of output must contain the required sequence A (in the form of N space-
separated positive integers).
Sample Input
2
0 2
2 0
4
0 3 6 7
3 0 5 6
6 5 0 9
7 6 9 0
Sample Output
1 1
2 1 4 5
#include <iostream>
using namespace std;
int
main()
{
freopen("sume.data.in", "r", stdin);
freopen("test.out", "w", stdout);
int s, n, a[1010], ans[1010];
long long int ssum, sa;//注意越界问题
while(cin>>n){
sa=0;
ssum=0;
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
cin>>s;
ssum+=s;
if(i==1){
a[j]=s;
sa+=s;
}
}
}
ssum=(ssum/2)/(n-1);
if(sa==2){
ans[1]=1;
}
else{
ans[1]=(sa-ssum)/(n-2);
}
for(int i=2; i<=n; i++){
ans[i]=a[i]-ans[1];
}
for(int i=1; i<=n; i++){
cout<<ans[i];
if(i!=n){
cout<<" ";
}
}
cout<<endl;
}
return 0;
}