실행 시간 제한 | 메모리 제한 |
---|---|
1 초 | 128 MB |
인욱은 (1 <= N <= 10)개의 공을 가지고 있는데, 각 공에는 1.. 범위의 번호가 적혀져 있으며, 공은 무작위 순서로 배열되어있다.
첫 번째 공을 , 두 번째 공을 라 하고, 이런 식으로 계속해서 로 명명한다. 물론, 에 붙여진 라벨이 1일 확률은 매우 낮다.
인욱은 공들을 정렬하기 위해 다음과 같은 알고리즘을 수행한다.
인욱은 공들이 이 '정렬' 과정에서 얼마나 많이 움직였는지 알고 싶어한다.
예를 들어, =8 개의 공으로 구성된 배열을 생각해보자:
8 5 2 3 4 7 1 6
먼저, 인욱은 줄에서 각 절반을 따로 정렬한다:
8 5 2 3 | 4 7 1 6
각 절반에 공이 여러 개이므로, 인욱은 '첫 번째' 절반부터 시작하여 해당 절반을 개별적으로 정렬한다:
8 5 | 2 3
다시 분할하면, 인욱은
8 | 5 and 2 | 3
를 만들었고, 이는 두 번째 규칙에 따라 각각 정렬하여 최종적으로는 아래와 같이 산출 할 수 있다.:
5 | 8 and 2 | 3 (<--unchanged)
첫 번째 하위 그룹의 정렬 과정에서 각 공이 이동하는 거리는 1이므로, total_distance_moved는 2가 된다. 두 번째 절반은 이미 정렬되어 있으므로, total_distance_moved는 2에 머무른다. 이 하위 그룹의 새로운 구성은 다음과 같다:
5 8 | 2 3
위 하위 그룹에 대한 알고리즘의 2단계에서는, 양 쪽을 사전 순으로 비교하면 (5 8 vs. 2 3), 2가 5보다 앞에 오기 때문에, 첫 번째 절반의 두 요소를 두 번째 절반의 해당 요소와 교환하여 다음과 같이 산출한다.
2 3 5 8
이 교환에서 4개의 공 각각이 공간 2를 총 8회 이동하므로, total_distance_moved는 10이 된다.
나머지 절반의 공들을 살펴보면, 4개의 목록을 2개의 하위그룹으로 나눈다:
4 7 | 1 6
각 쌍 (4, 7)과 (1, 6)은 이미 정렬된 순서이다.
(4 7)을 (1 6)과 비교하면, 1이 4보다 앞에 오므로 두 하위 그룹을 교환해야 한다:
1 6 4 7
이로 인해 총 8회 더 이동하게 되어, total_distanced_move는 18이 된다.
위의 작업 후 목록은 다음과 같이 표시된다. (두 그룹에 대해 2단계를 수행할 차례다):
2 3 5 8 | 1 6 4 7
1이 2보다 앞에 오므로, 절반이 교환되어야 한다, 이로 인해 다음과 같은 구성이 됩니다:
1 6 4 7 2 3 5 8
8개의 공 각각이 4 단위로 움직였으므로, 이는 총 32회의 추가로 이동한 것을 의미하며, total_distance_moved는 50이 된다
따라서, 답은 50과 1 6 4 7 2 3 5 8이다.
3 8 5 2 3 4 7 1 6
50 1 6 4 7 2 3 5 8