우편 배달

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

요약
수직선 위 여러 좌표에 배달할 편지 수와 트럭 용량 K가 주어질 때, 모든 편지를 배달하고 출발점으로 돌아오는 최소 총 이동 거리를 구한다.
난이도

보통10점 중 5점

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

문제

우체국은 우편 요금을 올리는 대신 비용을 줄이는 방법을 찾고 있다. 한 가지 방법은 우체국에서 출발해 필요한 모든 배달지에 우편물을 전달하고 우체국으로 돌아오기까지의 총 이동 거리를 최소화하는 것이다. 배달할 우편물이 트럭에 한 번에 다 실리지 않을 수도 있으므로, 이동 거리에는 다시 싣기 위해 우체국으로 돌아오는 거리도 포함된다.

문제를 단순하게 만들기 위해 세계가 1차원이라고 가정한다. 우체국은 수직선의 원점 00에 있고, 각 배달지는 정수 좌표 하나로 나타난다. 트럭은 편지를 한 번에 최대 KK통까지 싣고, 매번 우체국에서 출발해 우체국으로 돌아온다. 한 번 나갈 때 여러 배달지를 방문해도 되고, 지나가는 배달지에 실은 편지의 일부만 내려놓아도 된다. 이동 거리는 트럭이 수직선 위에서 움직인 거리의 합이다.

트럭 용량이 100100통이고 좌표 −10-10에 5050통, 좌표 1010에 175175통, 좌표 2525에 2020통을 배달해야 하는 경우를 보자. 가장 효율적인 계획은 이렇다. 먼저 5050통을 좌표 −10-10에 배달한다(2×10=202 \times 10 = 20). 다음으로 100100통을 좌표 1010에 배달한다(2×10=202 \times 10 = 20). 마지막으로 좌표 1010에 남은 7575통과 좌표 2525에 갈 2020통을 함께 싣고 나가, 가는 길에 7575통을 내려놓고 좌표 2525까지 갔다 온다(2×25=502 \times 25 = 50). 총 이동 거리는 9090이다.

모든 편지를 배달하고 우체국으로 돌아오는 데 필요한 최소 총 이동 거리를 구하라.

입력

첫 줄에 두 정수 NN과 KK가 주어진다. NN은 배달지의 수로 3≤N≤10003 \le N \le 1000이고, KK는 트럭의 적재 용량으로 1≤K≤100001 \le K \le 10000이다.

이어지는 NN개의 줄에는 각각 두 정수 xjx_j와 tjt_j가 주어진다. xjx_j는 배달지의 좌표이고 tjt_j는 그 배달지에 전달할 편지 수이다. 모든 jj에 대해 −1500≤x1<x2<⋯<xN≤1500-1500 \le x_1 < x_2 < \cdots < x_N \le 1500이고 1≤tj≤8001 \le t_j \le 800이다. 배달지 좌표는 모두 00이 아니다. 즉 우체국 자리에 있는 배달지는 없다.

출력

모든 편지를 배달하고 우체국으로 돌아오는 데 필요한 최소 총 이동 거리를 한 줄에 출력한다.

예제2

  1. 예제 1

    입력
    3 100
    -10 50
    10 175
    25 20
    
    예상 출력
    90
  2. 예제 2

    입력
    5 3
    -1002 800
    -1001 800
    -1000 800
    -999 800
    -998 800
    
    예상 출력
    2668000