아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

이동 로봇

시간 제한1초메모리 제한512 MB

요약
직선 위 n개 로봇의 현재 위치가 주어질 때, 로봇들이 어떤 순서로든 정확히 d 간격으로 늘어서도록 만들 때 각 로봇이 이동한 거리의 최댓값을 최소화하는 값을 구한다.
난이도

보통10점 중 7점

유형
이분 탐색, 정렬, 그리디, 수학
정답자
아직 제출이 없습니다

문제

요즘 이동 로봇은 여러 산업 현장과 연구 현장에서 흔히 쓰인다. 당신은 매우 길고 좁고 곧은 동굴을 탐사하는 n대의 이동 로봇을 제어하는 임무를 맡았다. 이 동굴은 그냥 직선으로 볼 수 있다. 이동 로봇은 주변 환경에서 데이터를 수집하며, 무한궤도 덕분에 기동성이 뛰어나다. 당신은 관제 데스크에서 무선 제어 시스템으로 n대의 이동 로봇을 제어할 수 있다. 당신이 제어하는 n대의 이동 로봇에는 1부터 n까지 번호가 붙어 있으며, 로봇 1, 로봇 2, …, 로봇 n − 1, 로봇 n으로 구분한다.

이동 로봇은 간단한 적외선 통신 프로토콜로 서로 수집한 데이터를 공유할 수도 있다. 다만 로봇 간 통신은 다음의 매우 엄격한 배치가 n대의 이동 로봇 모두에 대해 완성되었을 때만 작동한다. 모든 i = 1, 2, … , n − 1에 대해 로봇 i와 로봇 i + 1 사이의 거리가 정확히 d여야 한다. 여기서 d는 주어진 양의 실수이고, 두 로봇이 동굴 안 같은 위치에 있어서는 안 된다. 동굴은 매우 길고 매우 좁고 매우 곧아서 양쪽으로 끝없이 뻗은 직선으로 볼 수 있으므로, 동굴 안에서 각 이동 로봇의 위치는 실수 x로 나타낸다. 따라서 두 이동 로봇 사이의 거리는 두 위치의 차로 계산한다.

이동 로봇들은 현재 위치에서 서로 데이터를 공유해야 하며, 당신은 로봇 간 통신을 위해 로봇들을 움직이려 한다. 로봇은 느리고 동굴을 따라 같은 속도로 동시에 움직이므로, 시간을 최대한 아끼기 위해 각 로봇이 이동해야 하는 최대 거리를 최소화하려 한다. 이동 중 두 로봇은 둘 다 동굴 안 같은 위치에 있는 순간 안전하게 서로를 지나친다고 가정한다. 따라서 현재 두 대 이상의 로봇이 동굴 안 같은 위치에 있을 수도 있다.

n대의 이동 로봇의 현재 위치가 주어졌을 때, n대의 로봇 각각이 이동하는 최대 거리를 최소화하는 로봇 간 통신을 위한 새 위치를 계산하고, 그 최소화된 최대 이동 거리를 출력하는 프로그램을 작성하시오.

입력

프로그램은 표준 입력에서 입력을 읽는다. 입력은 정확히 두 줄로 이루어진다. 첫째 줄에는 두 정수 n과 d가 주어진다(2 ≤ n ≤ 1,000,000, 1 ≤ d ≤ 10^10). n은 당신이 제어하는 이동 로봇의 수이고, d는 로봇 간 통신을 위해 로봇들이 유지해야 하는 거리이다. 각 이동 로봇은 1부터 n까지의 번호로 구분한다. 둘째 줄에는 n개의 정수가 주어지며, 각 정수는 −10^16 이상 10^16 이하이고, 로봇 1, 로봇 2, …, 로봇 n의 현재 위치를 이 순서대로 나타낸다.

출력

프로그램은 표준 출력에 출력을 쓴다. 주어진 현재 위치에서 로봇 간 통신을 위해 이동 로봇들이 이동해야 하는 최대 거리의 최솟값을 나타내는 실수 하나를 소수 첫째 자리에서 반올림하여 한 줄에 정확히 출력한다.

예제4

  1. 예제 1

    입력
    5 1
    1 3 5 7 9
    
    예상 출력
    2.0
    
  2. 예제 2

    입력
    5 1
    -10 -1 0 1 2
    
    예상 출력
    4.0
    
  3. 예제 3

    입력
    5 1
    1 3 5 9 7
    
    예상 출력
    2.5
    
  4. 예제 4

    입력
    5 1
    1 1 1 1 1
    
    예상 출력
    2.0