점프
한국어
Language
Contribute a translation- Time limit
- 1000 ms
- Memory limit
- 1024 MB
- Submissions
- 0
- Correct
- 0
- Solved by
- 0
- AC rate
- —
Statement
2 이상의 $N$에 대해 $1$부터 $N$까지의 번호가 붙은 $N$개의 정점이 번호 순서대로 일직선상에 놓여있고, 각 $i(1 \le i \le N-1)$에 대해 정점 $i$와 $i+1$을 양방향으로 잇는 간선이 있는 상황을 고려하자.
예를 들어, $N = 5$인 경우에는 아래 그림과 같이 정점과 간선이 배치된다.
정올이는 이 그래프 위에서 점프하여 이동할 수 있다. 정올이가 어느 한 정점에서 다른 정점으로 점프하면, 그 사이에 있는 모든 간선을 한 번씩 지나간다.
예를 들어:
- 정올이가 정점 $4$에서 $2$로 점프했다면, 정올이는 정점 $3$과 $4$ 사이의 간선과 정점 $2$와 $3$ 사이의 간선을 각각 한 번씩 지나간다.
- 정올이가 정점 $3$에서 $4$로 점프했다면 정점 $3$과 $4$ 사이의 간선을 한 번 지나간다.
정올이는 정점 $1$에서 시작해 $N-1$번의 점프를 거쳐 정점 $N$에 도착했고, 그 과정에서 모든 정점을 정확히 한 번씩 방문했다. (처음에 정점 $1$에 있었던 것도 방문으로 간주한다.)
다시 말해, 정올이가 정점들을 방문한 순서를 $p_1 \rightarrow p_2 \rightarrow \cdots \rightarrow p_{N-1} \rightarrow p_N$ 이라고 할 때, $p_1 = 1$이고, $p_N = N$ 이며, $\{p_1, p_2, \cdots, p_N\} = \{1, 2, \cdots, N\}$이다.
이때, 정올이가 점프하는 과정에서 각 $i(1 \le i \le N-1)$에 대해 정점 $i$와 $i+1$ 사이 간선을 지나간 횟수를 $c_i$라고 하자.
예를 들어, 정올이가 $(p_1=1) \rightarrow (p_2 = 3) \rightarrow (p_3 = 4) \rightarrow (p_4 = 2) \rightarrow (p_5 = 5)$ 순서로 방문했다면, $c_1 = 1$, $c_2 = 3$, $c_3 = 3$, $c_4 = 1$이 된다.
정올이가 정점들을 방문하면서 각 간선을 지난 횟수를 나타내는 수열 $c = (c_1, c_2, \cdots, c_{N-1})$이 주어졌을 때, 이로부터 정올이의 방문 순서 $p_1, p_2, \cdots, p_N$을 구하는 프로그램을 작성하라.
주어지는 수열 $c$는 항상 어떤 방문 순서에 의해 만들어진 것이므로, 이를 만족하는 방문 순서는 항상 존재한다. 만약 가능한 방문 순서가 여러 가지라면 아무것이나 하나 구하면 된다.
Constraints
- 주어지는 모든 수는 정수이다.
- $2 \le N \le 200\,000$
- $1 \le i \le N-1$인 모든 $i$에 대해 $1 \le c_i \le 10^{18}$
- 가능한 방문 순서가 존재하는 입력만 주어진다.
Subtasks
- (10점) $N \le 10$.
- (10점) $1 \le i \le N-1$인 모든 $i$에 대해 $c_i \le 3$.
- (15점) $N \ge 4$ 이며, $2$ 이상 $N-2$ 이하의 어떤 정수 $M$이 존재해, $c_1 \le c_2 \le \cdots \le c_M$ 이고 $c_{M} \ge c_{M+1} \ge \cdots \ge c_{N-1}$ 이다. 다시 말해, $c_i$가 단조 증가하다가 단조 감소하는 형태를 가진다.
- (35점) $N \le 300$.
- (30점) 추가 제약 조건 없음.
Input
첫 번째 줄에 정점의 개수 $N$이 주어진다.
두 번째 줄에 $N-1$개의 정수 $c_1, c_2, \cdots, c_{N-1}$이 공백을 사이에 두고 주어진다. 이때, $c_i$는 정점 $i$와 $i+1$ 사이의 간선을 지나간 횟수를 의미한다.
Output
정올이의 가능한 방문 순서 $p_1, p_2, \cdots, p_N$을 공백으로 구분하여 출력한다. 만약 가능한 방문 순서가 여러 가지라면 아무것이나 하나 출력한다.
Examples
5 1 3 3 1
1 3 4 2 5
7 1 3 3 5 3 1
1 3 5 2 6 4 7
Tags
No tags yet