앳코더 스터디
시간 제한1초메모리 제한512 MB
2N-1개의 건물이 일렬로 있고 승형이는 건물 N에서 출발합니다. 1칸 이동이나 N칸 점프로 흩어진 M명을 모두 모을 때 최소 시간을 구합니다.
문제
서강 마을은 직선 형태의 마을이다. 건물이 총 개 일렬로 늘어서 있고, 왼쪽부터 1번부터 번까지 번호가 매겨져 있다. 이 마을에는 근수 명과 승형이가 살고 있다. 근수들은 모두 서로 다른 건물에 있고, 승형이는 K512가 있는 번 건물에 있다. 근수들과 승형이는 매주 월요일 앳코더 스터디를 진행한다. 그런데 스터디 시작 5분 전인데도 근수가 한 명도 오지 않았다! 화가 난 승형이는 숨겨 둔 특별한 보법으로 마을 곳곳의 근수들을 데리고 K512로 돌아오려고 한다.
승형이는 다음 세 가지 보법을 쓸 수 있다.
- 1초 만에 이웃한 건물로 이동할 수 있다. 즉, 번 건물에서 번 또는 번 건물로 이동할 수 있다. 1번 또는 번 건물에 있다면 각각 2번 또는 번 건물로만 이동할 수 있다.
- 1초 만에 정확히 개의 건물을 건너뛰고 이동할 수 있다. 즉, 인 에 대해서는 번 건물에서 번 건물로, 인 에 대해서는 번 건물에서 번 건물로 이동할 수 있다.
- 지금까지 방문한 적 있는 모든 건물로 시간을 지체하지 않고 즉시 이동할 수 있다. 단, 2번 보법을 쓰는 중에 건너뛴 건물은 방문한 건물로 보지 않는다.
승형이는 근수가 있는 건물에 도착하면 바로 근수를 데리고 나오므로, 근수를 챙기는 데 추가 시간은 걸리지 않는다. 모든 근수를 데리고 돌아오는 데 걸리는 최소 시간을 계산해 보자!
입력
첫 번째 줄에 정수 과 근수의 수 이 주어진다. (; )
두 번째 줄에는 번 근수의 위치 가 부터 까지 공백으로 구분되어 주어진다. 모든 근수의 위치는 서로 다르며, 인 경우는 없다. ()
출력
승형이가 모든 근수를 데리고 돌아오는 데 걸리는 최소 시간을 출력한다.