보안 업체
면접 대비시간 제한2초메모리 제한128 MB
직선 위에 놓인 점들 사이 이동 시간이 주어지고, 시작점 a에서 출발해 모든 점을 방문할 때 각 점의 최초 도착 시각 합을 최소화한다.
문제
명우는 보안 업체 직원으로, 강남역 주변에 있는 여러 상점을 도보로 순찰하는 일을 맡고 있다.
강남역 일대는 하나의 직선(선분)으로 나타낼 수 있으며, 명우의 회사와 상점들은 왼쪽부터 차례로 이 직선 위의 점 으로 표현된다. 회사는 에 있고, 이 점을 시작점 라고 한다. 명우는 에서 순찰을 시작하여 모든 상점 를 적어도 한 번씩 방문해야 한다.
이웃한 두 점 와 사이를 오가는 데 걸리는 시간은 이다. 점 의 대기 시간 는 시작점 를 출발한 뒤 에 처음 도착하기까지 걸린 시간이다. 시작점 자신의 대기 시간 는 이다. 명우는 모든 상점의 대기 시간의 합이 최소가 되도록 순찰 경로를 정해야 한다.
예를 들어 상점이 부터 까지 개 있고 시작점이 이며, , , , , 라고 하자. 명우가 에서 오른쪽으로 걷기 시작하면 대기 시간 와 는 각각 과 이 된다. 순찰 순서를 적절히 정하면 대기 시간의 합을 로 만들 수 있으며, 이보다 더 작게 만드는 방법은 없다.
점의 개수 과 이웃한 점들 사이의 이동 시간 () 이 주어질 때, 대기 시간의 합을 최소로 하는 값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 가 주어진다. 각 테스트 케이스는 다음과 같이 구성된다.
- 첫째 줄에 상점의 수 () 이 주어진다.
- 둘째 줄에 시작점의 위치 () 가 주어진다. 번째 점 가 시작점이다.
- 이어지는 개의 줄 중 번째 줄에는 () 이 주어진다.
출력
각 테스트 케이스마다 모든 상점을 순찰하는 모든 방법 중 대기 시간의 합의 최솟값을 한 줄에 하나씩 출력한다.