시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
2 초 | 1024 MB | 55 | 17 | 16 | 31.373% |
자카르타에는 $N$개의 송신탑이 있다. 송신탑들은 일직선 상에 위치하며 왼쪽에서 오른쪽으로 $0$부터 $N - 1$까지 번호가 붙어 있다. $0 \le i \le N - 1$인 각 $i$에 대해, 송신탑 $i$의 높이는 $H[i]$ 미터이다. 송신탑들의 높이는 모두 다르다.
어떤 양의 간섭 수치 $\delta$에 대해, 한 쌍의 송신탑 $i$와 $j$ ($0 \le i \lt j \le N - 1$)가 서로 통신할 수 있다는 것은 다음을 모두 만족하는 중개 송신탑 $k$가 존재한다는 것을 의미한다.
팍 뎅클렉은 자신의 새로운 송신 네트워크를 위해 몇 개의 송신탑을 빌리려고 한다. 당신은 다음과 같은 팍 뎅클렉의 질문 $Q$개에 대해 답변해야 한다: 파라미터 $L, R$과 $D$ ($0 \le L \le R \le N - 1$이고 $D > 0$)가 주어지면, 팍 뎅클렉이 빌릴 수 있는 송신탑의 최대 개수는 몇 개인가? 단, 다음을 가정한다:
참고로 빌린 두 송신탑이 중개 송신탑 $k$를 이용하여 통신할 수 있을 때, 송신탑 $k$는 빌렸어도 되고 빌리지 않았어도 된다.
다음 함수를 구현해야 한다:
void init(int N, int[] H)
max_towers
호출이 이어진다.
int max_towers(int L, int R, int D)
다음 호출을 생각해보자:
init(7, [10, 20, 60, 40, 50, 30, 70])
max_towers(1, 5, 10)
팍 뎅클렉은 송신탑 $1$, $3$, 그리고 $5$를 빌릴 수 있다. 아래 그림에서 색칠된 사다리꼴이 빌린 송신탑을 나타낸다.
$40 \le 50 - 10$이고 $30 \le 50 - 10$이므로 송신탑 $3$과 $5$는 송신탑 $4$를 중개 송신탑으로 이용해서 서로 통신할 수 있다. 송신탑 $1$과 $3$은 중개 송신탑 $2$를 이용하여 서로 통신할 수 있다. 송신탑 $1$과 $5$는 중개 송신탑 $3$을 이용하여 서로 통신할 수 있다. $3$개보다 더 많은 송신탑을 빌릴 수 있는 방법이 없으므로, 함수는 $3$을 리턴해야 한다.
max_towers(2, 2, 100)
범위에 포함되는 송신탑이 $1$개 밖에 없으므로, 팍 뎅클렉은 오직 $1$개의 송신탑만 빌릴 수 있다. 따라서 함수는 $1$을 리턴해야 한다.
max_towers(0, 6, 17)
팍 뎅클렉은 송신탑 $1$과 $3$을 빌릴 수 있다. $20 \le 60 - 17$이고 $40 \le 60 - 17$이므로 송신탑 $1$과 $3$은 중개 송신탑 $2$를 이용하여 서로 통신할 수 있다. $2$개보다 더 많은 송신탑을 빌릴 수 있는 방법이 없으므로, 함수는 $2$를 리턴해야 한다.
번호 | 배점 | 제한 |
---|---|---|
1 | 4 | 다음을 모두 만족하는 송신탑 $k$ ($0 \le k \le N - 1$)가 존재한다.
|
2 | 11 | $Q = 1$, $N \le 2000$ |
3 | 12 | $Q = 1$ |
4 | 14 | $D = 1$ |
5 | 17 | $L = 0$, $R = N - 1$ |
6 | 19 | 모든 |
7 | 23 | 추가적인 제한이 없다. |
샘플 그레이더의 입력 양식은 다음과 같다:
샘플 그레이더는 다음 형식으로 답을 출력한다:
max_towers
호출의 리턴값Olympiad > International Olympiad in Informatics > IOI 2022 > Day 1 3번
C++17, C++20, C++17 (Clang), C++20 (Clang)