Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

자이의 프로그래밍

sequencesum 본문

Algorithm/Cases-BOJ

sequencesum

Xi_kor 2020. 7. 12. 20:18

문제

옛날 옛적에, N개의 양의 정수를 가지는 수열 A가 있었다. 당신은 수열 자체를 알지는 못하지만 수열의 두 요소의 합은 알 수 있다. 수열 A를 찾아라!

 

입력

첫째 줄에 양의 정수 N이 주어진다. (3 <= N <= 1000 ) N개의 줄에 N개의 양의 정수가 TABLE S로 주어진다. 각 정수들은 100000 이하이다. TABLE S[ i, j ]  A[ i ] +A[ j ] 의 관계가 있다. (i j와 같지 않을 경우에만 해당하고, 만약 i j가 같다면 S[ i, j ] = 0 이다.) S[ i, j ]는 테이블에서 i번째 row j번째 column을 의미한다. 그리고 A[ i ] 는 수열 A i번째 요소를 의미한다. 어떤 입력 값에 대해서 양의 정수 수열 A는 단 하나 뿐임이 보장된다.

 

출력

첫째줄에 수열 A를 출력한다. (N개의 양의 정수를 공백을 가지고 출력한다.)

 

예제 입력

4

0 3 6 7

3 0 5 6

6 5 0 9

7 6 9 0

예제 출력

2 1 4 5

 

출처

COCI 2012/2013 Contest #6 2

 

힌트

S 2 3(예제에서는 5)이 의미하는 바는 A[2] + A[3] (예제에서는 1+4) 이다.

 

------------------------------------------------------------------------------------------------------------------------------

 

주어지는 n의 조건은 3이상 1000이하이다. 즉 적어도 a[0],a[1],a[2]는 반드시 존재한다는 뜻이기도 하다. 따라서 어떠한 n이 주어지던 a[0]을 먼저 구한 뒤 주어지는 행렬의 0행 x열에서 a[0]의 값을 빼서 a[x]의 값을 얻었다.

#include <iostream>
using namespace std;

int main() {
	int arr[1004][1004];
	int a[1004];
	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			cin >> arr[i][j];
		}
	}
	a[0] = (arr[0][1] + arr[0][2] - arr[1][2]) / 2;
	for (int i = 1; i < n; i++) {
		a[i] = arr[0][i] - a[0];
	}

	for (int i = 0; i < n; i++) {
		cout << a[i] << " ";
	}
	return 0;
}

'Algorithm > Cases-BOJ' 카테고리의 다른 글

계산기  (0) 2020.07.13
streetree  (0) 2020.07.12
PROSJEK  (0) 2020.07.12
pfactorization  (0) 2020.07.12
nextnum  (0) 2020.07.12