G. The 67th Iteration of “Counting is Fun”
문제 레이팅:
풀이
$b_i = 0$인 경우 무조건 $a_i = 0$입니다.
입력으로 주어지는 $b_i$를 만족하는 $a_i$가 존재하려면 $b_i \neq 0$에 대해 시각 $b_i - 1$일 때 $i - 1$ 혹은 $i + 1$이 앉아야 합니다.
해당 조건을 만족하는 $i - 1$ 혹은 $i + 1$을 $j$라 합시다.
$i$는 시각 $b_i - 1$까지 앉으면 안 되므로 $b_j < b_i - 1$인 경우가 존재하면 $a_i$는 적어도 시각 $b_i - 2$까지 앉은 사람의 수보다는 커야 합니다.
$b_j - 1 = b_i$인 경우만 존재하면 시각 $b_i - 1$까지 인접한 앉아있는 사람이 없으므로 무슨 일이 있어도 $b_i$이전에 앉을 수 없고, 따라서 $a_i$가 아무리 작아도 $0$만 아니면 됩니다.
그리고 $a_i$가 $b_i - 1$까지 앉은 사람의 수보다 크면 시각 $b_i$에 앉을 수 없으므로 이보다는 작거나 같아야 합니다.
$b_i = t$인 인덱스들을 따로 모아서 순회하면 $O(N)$에 $t = 0$부터 $t = n$까지 모든 인덱스들의 $a_i$ 최솟값과 최댓값을 계산할 수 있고, 이 범위의 크기를 모두 곱해서 출력하면 됩니다.
코드
1 | |