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

#3429

로봇(robot) 1초 1024MB

문제

N개의 로봇들이 원 상에 놓여있다.

원 상의 위치는 가장 북쪽을 위치 0으로 하고 일정한 간격으로 원을 M (≥ N​) 등분해서 

나뉘는 지점에 시계방향으로 순서대로 위치 1부터 M-1을 부여한다. 

그러면 원 상의 위치 0부터 M-1이 정의된다(그림1). 로봇들은 초기에 서로 다른 N개의 위치에 놓여있다.

 

원 상에 두 위치 xy사이의 거리는 y - x (y ≥ x)로 정의한다. 

로봇 Ri가 위치 xi에 놓여있으면 로봇은 자신으로부터 반시계방향과 시계방향으로 일정한 범위 R > 0안의 점들을 감시할 수 있다. 

다시 말해서, 위치 xi에서 시계 반대방향으로 거리 R 떨어진 위치를 a라 하고, 

시계 방향으로 거리 R 떨어진 위치를 b라고 할 때, 로봇 Ri는 원 상의 시계방향으로 위치 a에서 b사이의 부분을 감시할 수 있다.

 

우리는 원의 모든 부분을 감시하고 싶다. 초기 로봇들의 위치에서 감시하지 못하는 부분이 있을 수 있으므로 

이런 경우에 우리는 로봇들을 이동해서 원의 모든 부분을 감시할 수 있도록 하고 싶다. 

우리는 M ≤ 2RN 을 가정함으로써 항상 원의 모든 부분을 감시할 수 있는 로봇들의 이동을 찾을 수 있다.

 

로봇들은 이동하는 경우 위에 정의된 원 상의 위치로만 이동할 수 있고, 각 로봇마다 많아야 한번만 이동할 수 있다. 

이 때, 로봇들이 이동한 거리의 최댓값을 최소화하려고 한다.

 

예를 들어, 아래 <그림 1>에서 3개 로봇 R1, R2, R3 가 각각 위치 1, 2, 5에 놓여있고 감시 범위 R = 2이다. 

원의 모든 부분을 감시하기 위해서 로봇 R1​은 위치 0으로 로봇 R3는 위치 6으로 이동한다. 

이것이 로봇들의 이동 거리의 최댓값이 최소가 되는 이동이다.

 

 

N개 로봇들의 위치, 범위 R, 정수 이 주어질 때, 

원의 모든 부분을 감시할 수 있도록 로봇들을 이동할 때, 최대 이동거리의 최솟값을 찾아서 출력하시오.​

 


입력

표준 입력으로 다음 정보가 주어진다. 

입력의 첫 줄에는 로봇들의 개수를 나타내는 정수 ( 1 ≤ N ≤ 1,000,000) 이 주어진다.

둘째 줄에는 로봇의 감시 범위와 원 상의 위치를 정의하는 두 정수 R M(1 ≤ R,M ≤ 109, N ≤ M ≤ 2RN)이 주어진다. 

다음줄에 초기 로봇의 위치를 나타내는 서로 다른 N개의 정수 xi(0 ≤ xi ≤ M-1, i=1, ..., N)가 공백을 사이에 두고 주어진다. 


출력

표준 출력으로 원의 모든 부분을 감시할 수 있도록 로봇들의 최대 이동 거리의 최솟값을 출력한다.

부분문제

번호 점수 조건
#110점

M ≤ 10

#230점

M ≤ 7,000

#360점

원래의 제약조건 이외에 아무 제약조건이 없다.


예제1

입력
3

210
125
출력
1

예제2

입력
6

111
012345
출력
2

출처

KOI 2차 2019 초4

역링크