| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1 초 | 1024 MB | 81 | 3 | 2 | 100.000% |
용감한 용사 비타로는 던전 퀘스트에 도전한다.
던전은 0,1,ドル\dots,N-1$번까지 번호가 붙은 $N$개의 방으로 이루어져 있다. 0ドル$번 방을 제외한 각 방은 정확히 하나의 상위 방을 가진다. $i$번 방($i \ge 1$)의 상위 방은 $P[i]$번 방이며, 반대로 $i$번 방은 $P[i]$번 방의 하위 방이다. 한 방은 여러 개의 하위 방을 가질 수 있으며, 0ドル$번 방은 상위 방을 가지지 않는다.
비타로는 다음 규칙에 따라 방을 탐사한다.
던진의 $i$번 방은 난이도 $R[i]$와 레벨 $L[i]$를 가진다. 각 방의 레벨 $L[i]$는 변하지 않는다. 난이도 $R[i]$는 $i$번 방에서 출발하여 하위 방 방향으로 0ドル$번 이상 이동해 도달할 수 있는 방들 중, 이미 탐사한 방의 개수로 정의된다. 따라서 아직 탐사하지 않은 방의 난이도는 0ドル$이고, 0ドル$번 방의 난이도는 항상 지금까지 탐사한 방의 개수이다.
새로운 방을 탐사할 때마다 던전에 있는 모든 방에 다음 규칙이 적용된다. 이에 따라 일부 방에 몬스터가 추가될 수 있다. 이미 탐사한 방에서 몬스터가 추가될 수 있음에 유의하라.
비타로는 싸움을 최소화하고 싶기 때문에, 새로운 방을 탐사할 때는 탐사 직후 던전 전체에 새로 추가되는 몬스터 수가 최소가 되는 방을 선택한다. 만약 그런 방이 여러 개라면, 번호가 가장 작은 방을 선택한다.
하지만 비타로는 $P[i]$는 알지만 $L[i]$는 모른다. 이를 위해 그는 탐사할 수 있는 방 중 하나를 선택하여 조사하고, 그 방의 레벨 $L[i]$를 알 수 있다.
비타로가 던전 퀘스트를 성공적으로 마칠 수 있게 도와주자.
함수 구현에 앞서 #include "brave.h" 를 통해 "brave.h" 헤더 파일을 포함해야 한다.
당신은 다음 함수를 구현해야 한다.
void bitaroTravel(int N, std::vector<int> P)
이 함수 안에서 아래의 두 함수를 호출해 비타로의 탐험을 시뮬레이션해야 한다.
int explore(int i)
int investigate(int i)
explore 함수를 총 $N$번 호출해 모든 방을 탐험한 뒤에는 bitaroTravel 함수를 종료해야 한다.
종료 후, 방을 탐사한 순서가 문제의 조건에 맞으면 맞았습니다!! 판정을, 그렇지 않으면 틀렸습니다 판정을 받는다.
제출하는 소스 코드의 어느 부분에서도 입출력 함수를 실행해서는 안 된다.
| 번호 | 배점 | 제한 |
|---|---|---|
| 1 | 11 | $N \leq 400$. |
| 2 | 13 | $N \leq 2\ 000$. |
| 3 | 23 | $N \leq 100\ 000, P_i = \left \lfloor \dfrac{i - 1}{2} \right \rfloor$ (1ドル \leq i \leq N - 1$). |
| 4 | 32 | $N \leq 50\ 000$. |
| 5 | 21 | 추가적인 제약 조건이 없다. |
다음과 같은 호출을 생각하자.
bitaroTravel(6, [0, 0, 0, 2, 3, 1])
다음은 가능한 함수 호출 순서 중 하나이다.
investigate(0)
1ドル$
explore(0)
1ドル$
investigate(1)
1ドル$
investigate(2)
4ドル$
explore(2)
1ドル$
investigate(3)
1ドル$
explore(1)
1ドル$
investigate(5)
1ドル$
explore(3)
1ドル$
investigate(4)
2ドル$
explore(4)
1ドル$
explore(5)
1ドル$
investigate(5) 호출 직후, 탐사할 수 있는 후보는 3ドル$번과 5ドル$번 방이다.
따라서 추가 몬스터 수가 더 적은 3ドル$번 방을 탐사해야 한다.
최종적으로 올바른 탐사 순서는 $[0, 2, 1, 3, 4, 5]$ 이다.
Sample grader의 입력 형식은 아래와 같다.
$N$
$P[1] \ P[2] \ \cdots \ P[N-1]$
$L[0] \ L[1] \ \cdots \ L[N-1]$
비타로가 $i$번째로 탐사한 방을 $K[i]$라고 하자. Sample grader는 다음을 출력한다.
$U[1] \ U[2] \ \cdots \ U[N]$
Sample grader는 실제 채점에서 사용하는 그레이더와 다를 수 있음에 유의하라.
Contest > BOJ User Contest > Lemon Cup > Lemon Cup I번
C++17, C++20, C++23, C++26