페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#1831

[중등부] 2022 KOI 1차대회 대비 모의고사 (5월 1주차)

마법의 다이얼
서브태스크
3초 1024MB

문제

계속되는 알고리즘 공부에 잠시 지친 경근이는 다른 세계에서 몇 일간 쉬고 오면 좋을 것이라는 생각을 했다. 

그러던 어느 날, 다른 세계로 떠나는 문이 있는 장소를 상수에게 듣게 되어 그 곳으로 갔다. 

그 곳에는 다른 세계로 떠나는 문이 있었는데 잠겨 있었고, 문을 열 수 있는 커다란 다이얼 식 자물쇠가 있었다.

 

자물쇠는 위아래로 M개의 다이얼로 만들어져 있다. 각 다이얼은 R개의 칸이 있고 좌우로 칸에 맞추어 돌릴 수 있다. 

다이얼의 각 칸에는 점이 있을 수도 있고 점이 없을 수도 있다. 각 다이얼에는 최소 1개의 점이 있다. 

다이얼들을 돌려서 어떤 위치에서든 세로로 모든 칸에 점이 있도록 만들면 문이 열린다고 한다. 

각각의 다이얼은 따로 돌아간다. 

다이얼이 아주 무거워 돌리기 힘들기 때문에 다이얼을 돌리는 칸 수의 합을 최소화하고 싶다. 

 

 

위 그림은 다이얼의 한 예를 보여 준다. 

가능한 최선의 방법 중 하나는, 위에서 첫 번째 다이얼을 왼쪽으로 한 칸, 두 번째 다이얼을 왼쪽으로 두 칸, 

세 번째 다이얼을 오른쪽으로 한 칸, 네 번째 다이얼을 돌리지 않아서, 총 4칸을 돌리는 방법이다. 

 

다이얼의 크기와 점들의 위치를 입력으로 받아서 문이 열리도록 최소 칸 수로 다이얼을 돌리는 방법을 알아내는 프로그램을 작성하라. 

점들의 위치는 다이얼 번호와 칸 번호의 쌍인 좌표로 주어진다. 

제일 위의 다이얼이 0번 다이얼이다. 아래로 가면서 다이얼 번호가 1씩 증가한다. 

제일 아래 다이얼이 M-1번 다이얼이 될 것이다. 

칸 번호를 정하기 위해 임의의 동일한 위치의 (즉, 세로로 한 줄에 위치한) 칸들을 0번으로 잡는다. 

오른쪽으로 가면서 칸 번호가 1씩 증가한다. 0번 칸의 왼쪽에는 R-1번 칸이 있을 것이다. 

주어진 점들의 좌표가 겹치는 경우는 없다. 


입력

입력은 다음과 같은 형식으로 주어진다.

N M R

D_1 C_1

...

D_N C_N

 

여기서 N의 점의 개수를 의미하며 (D_i, C_i)는 각 점의 좌표를 의미한다.

 

<제한>

- 1 <= R <= 1,000,000,000

- 1 <= M <= N <= min(MR, 500,000)

 

<서브태스크>

 

#1 (20점) : 1 <= N, R <= 5,000

#1 (30점) : 1 <= M, R <= 5,000​

#1 (50점) : 추가적인 제한 조건이 없다.


출력

문이 열리도록 다이얼을 돌려야 하는 최소 회수를 한 줄에 출력한다. 


예제

7 4 20

1 3
0 2
2 6
3 8
3 1
2 0
1 8
4
로그인해야 코드를 작성할 수 있어요.