만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

우체국 4

시간 제한10초메모리 제한1024 MB

요약
원형 도로(길이 L) 위의 마을 V개 중 P개를 골라 우체국을 세웁니다. 각 마을에서 가장 가까운 우체국까지의 거리 합이 최소가 되도록 합니다.
난이도

보통10점 중 7점

유형
동적 계획법, 누적 합, 배열
정답자
아직 제출이 없습니다

문제

원형으로 된 큰 길(순환로)이 뻗어 있고, 길 옆에 V개의 마을이 자리 잡고 있다. 큰 길의 둘레 길이는 정수 L이다. 이 문제에서 큰 길은 0 이상 L-1 이하의 정수 위치가 원을 이루는 길이며, 각 마을의 위치는 길 위의 정수 좌표로 나타낸다. 한 위치에 여러 마을이 있을 수 있다. 좌표가 x, y인 두 마을의 거리는 min⁡(∣x−y∣,L−∣x−y∣)\min(|x - y|, L - |x - y|)이다.

마을이 있는 곳에 우체국을 P개 지으려고 한다. 모든 마을에 짓는 것은 아니고, 전체 마을 중 P곳을 골라 그 위치에 우체국을 짓는다. 각 마을과 그 마을에서 가장 가까운 우체국 사이 거리의 합이 최소가 되도록 하고 싶다.

각 마을의 위치와 우체국 개수를 입력받아, 각 마을과 가장 가까운 우체국 사이 거리 합의 최솟값을 계산하고, 그 결과를 낼 수 있도록 우체국을 지을 위치를 출력하는 프로그램을 작성하라.

입력

첫 줄에 세 정수 V, P, L이 주어진다. (1≤P≤V≤25001 \le P \le V \le 2500, 1≤L≤10121 \le L \le 10^{12})

다음 줄에는 각 마을의 위치를 나타내는 V개의 정수 좌표가 비내림차순으로 주어진다. 각 좌표의 범위는 0 이상 L-1 이하이다.

출력

첫째 줄에 각 마을과 거기서 가장 가까운 우체국 사이 거리들의 합의 최솟값 S를 출력한다.

다음 줄에는 우체국을 지을 마을들의 위치 P개를 비내림차순으로 출력한다.

예제2

  1. 예제 1

    입력
    10 5 200
    1 2 3 6 7 9 11 22 44 50
    
    예상 출력
    9
    2 7 22 44 50
    
  2. 예제 2

    입력
    10 5 51
    1 2 3 6 7 9 11 22 44 50
    
    예상 출력
    8
    1 6 9 22 44