더티 드라이빙

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

요약
앞차 n대까지의 거리와 상수 p가 주어질 때, 사이에 낀 차 수를 k라 하면 모든 차 x가 p*(k+1) 이상 떨어지도록 가장 가까운 차와의 최소 간격을 구한다.
난이도

보통10점 중 5점

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

문제

다른 모든 훌륭한 운전자처럼, 당신도 주변 운전자들에게 경적을 울리고 욕을 하는 것을 즐긴다. 지금 당신은 긴 정체 행렬의 맨 뒤에 있으며, 다들 앞차와의 적절한 거리를 지키지 못한다며 씩씩거리고 있다. 그런데 정작 당신은 안전거리를 제대로 지키고 있는가?

당신은 절대로 브레이크를 밟지 않으려면, 앞에 있는 임의의 차 xx 와의 거리를 항상 p⋅(n+1)p \cdot (n + 1) 이상으로 유지해야 한다는 것을 계산해 냈다. 여기서 nn 은 당신과 차 xx 사이에 있는 차의 수이고, pp 는 당신이 지금 몰고 있는 차에 따라 정해지는 정수 상수이다.

앞에 있는 차들의 상대적인 위치는 변하지 않으므로, 당신이 조절할 수 있는 것은 바로 앞 차와의 거리뿐이다. pp 값과 앞에 있는 각 차까지의 현재 거리가 (임의의 순서로) 주어질 때, 절대로 브레이크를 밟지 않기 위해 바로 앞 차와 유지해야 하는 최소 거리를 구하여라.

입력

첫째 줄에 두 정수 nn 과 pp 가 주어진다 (1≤n≤1000001 \le n \le 100000, 1≤p≤201 \le p \le 20). 각각 앞에 있는 차의 수와 감속 상수를 의미한다.

둘째 줄에 서로 다른 nn 개의 정수가 주어지며, 이는 앞에 있는 각 차까지의 현재 거리이다. 각 거리는 [1,107][1, 10^7] 구간에 속한다.

출력

절대로 브레이크를 밟지 않기 위해 바로 앞 차와 유지해야 하는 최소 거리를 정수 하나로 출력한다.

예제2

  1. 예제 1

    입력
    3 1
    1 2 4
    
    예상 출력
    1
    
  2. 예제 2

    입력
    6 3
    2 3 4 5 6 1
    
    예상 출력
    13