RiseOJ는 solved.ac와 제휴 관계가 없습니다. 티어 아이콘 © solved.ac. solved.ac
포럼
KOI00010

점프

Platinum V 플래티넘 V
난이도
2s
시간 제한
1024MB
메모리 제한
2
맞았습니다!!
2
제출 수
100.0%
정답률
레이팅

의견: 0

설명

\(2\) 이상의 \(N\)에 대해 \(1\)부터 \(N\)까지의 번호가 붙은 \(N\)개의 정점이 번호 순서대로 일직선상에 놓여있고, 각 \(i\) (\(1 ≤ i ≤ N − 1\))에 대해 정점 \(i\)\(i + 1\)을 양방향으로 잇는 간선이 있는 상황을 고려하자.

예를 들어, \(N = 5\)인 경우에는 아래 그림과 같이 정점과 간선이 배치된다.

Fig 1

정올이는 이 그래프 위에서 점프하여 이동할 수 있다. 정올이가 어느 한 정점에서 다른 정점으로 점프하면, 그 사이에 있는 모든 간선을 한 번씩 지나간다.
예를 들어:
- 정올이가 정점 \(4\)에서 \(2\)로 점프했다면, 정올이는 정점 \(3\)\(4\) 사이의 간선과 정점 \(2\)\(3\) 사이의 간선을 각각 한 번씩 지나간다.
- 정올이가 정점 \(3\)에서 \(4\)로 점프했다면 정점 \(3\)\(4\) 사이의 간선을 한 번 지나간다.

정올이는 정점 \(1\)에서 시작해 \(N − 1\)번의 점프를 거쳐 정점 \(N\)에 도착했고, 그 과정에서 모든 정점을 정확히 한 번씩 방문했다. (처음에 정점 \(1\)에 있었던 것도 방문으로 간주한다.)

다시 말해, 정올이가 정점들을 방문한 순서를 \(p_1 → p_2 → \cdots → p_{N-1} → p_N\) 이라고 할 때, \(p_1 = 1\)이고, \(p_N = N\) 이며, \(\{p_1 , p_2 ,\cdots , p_N \} = \{1, 2, \cdots , N\}\)이다.

이때, 정올이가 점프하는 과정에서 각 \(i\) (\(1 ≤ i ≤ N − 1\))에 대해 정점 \(i\)\(i + 1\) 사이 간선을 지나간 횟수를 \(c_i\)라고 하자.

예를 들어, 정올이가 \((p_1 = 1) → (p_2 = 3) → (p_3 = 4) → (p_4 = 2) → (p_5 = 5)\) 순서로 방문했다면, \(c_1 = 1, c_2 = 3, c_3 = 3, c_4 = 1\)이 된다.

Fig 2

정올이가 정점들을 방문하면서 각 간선을 지난 횟수를 나타내는 수열
\(c = (c_1 , c_2 ,\cdots , c_{N-1})\)이 주어졌을 때, 이로부터 정올이의 방문 순서
\(p_1 , p_2 ,\cdots , p_N\)을 구하는 프로그램을 작성하라.

주어지는 수열 \(c\)는 항상 어떤 방문 순서에 의해 만들어진 것이므로, 이를 만족하는 방문 순서는 항상 존재한다. 만약가능한 방문 순서가 여러 가지라면 아무것이나 하나 구하면 된다.

제약
  • 주어지는 모든 수는 정수이다.
  • \(2 ≤ N ≤ 200\, 000\)
  • \(1 ≤ i ≤ N − 1\)인 모든 \(i\)에 대해
  • \(1 ≤ c_i ≤ 10^{18}\)
  • 가능한 방문 순서가 존재하는 입력만 주어진다.
입력 형식

첫 번째 줄에 정점의 개수 \(N\)이 주어진다.
두 번째 줄에 \(N − 1\)개의 정수 \(c_1 , c_2 ,\cdots , c_{N-1}\)이 공백을 사이에 두고 주어진다. 이때, \(c_i\)는 정점 \(i\)\(i + 1\) 사이의 간선을 지나간 횟수를 의미한다.

출력 형식

정올이의 가능한 방문 순서 \(p_1 , p_2 ,\cdots , p_N\)을 공백으로 구분하여 출력한다. 만약 가능한 방문 순서가 여러 가지라면 아무것이나 하나 출력한다.

서브태스크
서브태스크점수설명

1

10점

\(N \le 10\).

2

10점

\(1 \le i \le N - 1\)인 모든 \(i\)에 대해 \(c_i \le 3\).

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\)가 단조 증가하다가 단조 감소하는 형태를 가진다.

4

35점

\(N \le 300\).

5

30점

추가 제약 조건 없음.

예제 1
입력
5
1 3 3 1
출력
1 3 4 2 5
예제 2
입력
7
1 3 3 5 3 1
출력
1 6 2 3 5 4 7
문제 정보

riseoj 작성

출처 올림피아드 > 한국정보올림피아드 > KOI 2025 > 2차 대회 > 고등부 1번

평가 및 의견

점프

개요
출제자 난이도 Platinum V 플래티넘 V 의견 0 / 50 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

점프

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8