ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • BOJ 19933 Comparing Plants
    Problem Solving/Solution Sketch 2023. 2. 1. 09:59

    Comparing Plants (IOI 2020 Day 1 #1)

     

    서브태스크를 통해 순차적인 접근이 가능한, 풀면서 즐거웠던 문제이다.

     

     

     

    문제 설명

     

    $n$개의 식물이 원형으로 배치되어 있다. 각 식물의 높이는 전부 다르다.

    식물의 정확한 키는 알 수 없지만, 다른 식물들과의 상대적 높이는 알 수 있다. 구체적으로, 모든 식물에 대해서 자신과 시계방향으로 $k-1$개의 식물 중 자신보다 큰 식물의 개수 $r_i$가 주어진다.

    쿼리로 두 개의 식물이 주어졌을 때, 두 식물의 키를 비교하여라. 만약 비교할 수 없다면 0을 리턴한다.

     

     

     

    Subtask #1

     

    $k=2$인 경우, 모든 식물에 대하여 양옆의 식물과 직접적으로 키를 비교한 결과가 주어진다.

    쿼리 $(x, y)$에 대해서, $x, x+1, ... , y$ 또는 $x, x-1, ... , 0, n-1, ... , y$의 크기관계가 전부 같은지 확인하면 된다.

     

     

    Subtask #2, 3

     

    $2k > n$이라는 조건에 주목하자.

    이 경우, 모든 식물의 크기 관계를 파악할 수 있다.

    우선, 최대 키를 가지는 식물 $i$에 대해 $r_i = 0$임을 관찰할 수 있다.

    또한, $r_i = 0$인 모든 $i$에 대하여 키를 비교할 수 있다.

    • $r_x = r_y = 0$인 $x, y$에 대해, $y-x$나 $x-y$중 하나는 $k$를 넘지 않는다.
    • 이 때, 둘 중 시계 반대 방향에 있는 식물이 최대 키를 가지는 식물이다.

     

    이렇게 최대 키를 가진 식물 $x$를 찾았다면, 이 식물을 가장 작은 크기로 바꾼다.

    $i ∈ [x-k+1, x-1]$인 $i$에 대하여, $r_i$에 $1$씩 빼준다.

    이렇게 귀납적으로 모든 식물의 키를 순서대로 구할 수 있다.

     

     

    Subtask #4

     

    이제 최대 크기를 가질 수 있는 식물이 많아진다.

    최대 크기를 가질 수 있는 식물의 조건은 식물 $x$에 대해

    • $r_x = 0$이고
    • $i ∈ [x-k+1, x-1]$인 모든 $i$에 대하여 $r_i \neq 0$이다.

     

    이렇게 최대 크기를 가질 수 있는 식물들을 모두 구하고, Subtask #2, 3에서와 같이 이를 최소 크기로 바꾸는 것을 모든 식물을 확인할 때 까지 반복한다.

    i번째 반복에서 최대 크기를 가질 수 있는 식물들을 그룹 i라고 하자.

    Subtask 4에서는 항상 비교가 가능하므로, 쿼리 (x, y)에 대하여 x와 y 중 그룹이 작은 쪽을 리턴하면 된다.

     

     

    Full Solution

     

    $|x-y| < k$인 식물 $x$, $y$에 대하여, $x$와 $y$는 항상 비교가 가능하다.

    $|x-y| \geq k$인 경우, 어떤 경우에 비교가 가능할까? (일반성을 잃지 않고 x < y라고 하자.)

    • $x < i < x+k$이며 식물 $x$보다 키가 작은 $i$ 중 제일 큰 것을 $R_x$라고 하자.
    • $x+k-1 < y$일 동안 $x := R_x$를 반복한다.
    • 이렇게 이동한 후, $x$의 그룹이 $y$의 그룹보다 작으면 $x$는 $y$보다 크다.
    • 식물의 배치가 원형이기 때문에, 시계 반대 방향으로도 마찬가지로 비교해주어야한다.

     

    모든 식물의 그룹은 세그먼트 트리 등을 이용하여 $O(NlogN)$에 구할 수 있다.

    $R_x$(와 시계 반대방향으로의 $R_x$)는 전처리를 통해 모든 $x$에 대하여 $O(NlogN)$에 구할 수 있다.

    이를 Naive하게 비교해준다면 $O(NlogN+NQ)$의 시간복잡도로 Subtask #5를 맞을 수 있다.

    $R_x$를 Sparse Table 등을 이용하여 비교해준다면, $O((N+Q)logN)$의 시간복잡도로 AC를 받을 수 있다.

    'Problem Solving > Solution Sketch' 카테고리의 다른 글

    BOJ 17665 Triple Jump  (0) 2023.02.01
    BOJ 16793 Collapse  (0) 2023.02.01
    Baltic Olympiad in Informatics 2022 Day 1 연습  (0) 2023.01.23
    BOJ 19558 Joker  (0) 2023.01.23
    BOJ 19935 Carnival Tickets  (0) 2021.02.16

    댓글

Designed by Tistory.