아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

섬

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

요약
x좌표가 증가하는 순서로 섬을 지나는 두 번의 단조 경로로 모든 섬을 방문하되 두 특수 섬은 서로 다른 경로에서 들러야 한다. 최단 경로의 길이와 방문 순서를 구한다.
난이도

어려움10점 중 8점

유형
동적 계획법, 기하, 구현, 완전 탐색
정답자
아직 제출이 없습니다

문제

Wen Chen은 구조 보트의 선장이다. 그의 중요한 임무 중 하나는 매일 한 번 섬 무리를 방문하여 모든 것이 괜찮은지 확인하는 것이다. Wen 선장은 가장 서쪽 섬에서 출발하여 일부 섬을 방문하며 가장 동쪽 섬까지 첫 번째 이동을 하고, 그다음 가장 동쪽 섬에서 다시 첫 번째 섬으로 돌아오며 나머지 섬을 방문하는 두 번째 이동을 한다. 각 이동에서 Wen 선장은 꾸준히 동쪽(첫 번째 이동) 또는 서쪽(두 번째 이동)으로 움직이지만, 섬에 도달하기 위해 필요한 만큼 남북으로 움직인다. 유일한 문제는 Wen이 보트 연료를 얻는 두 개의 특별한 섬이 있어, 그 섬들을 서로 다른 이동에서 방문해야 한다는 것이다. 그림 7은 분홍색으로 표시된 두 특별한 섬(1과 3)과 Wen 선장이 택할 수 있는 한 가지 경로를 보여준다.

그림 7

각 섬의 위치와 두 특별한 섬이 주어졌을 때, 두 번의 이동으로 모든 섬을 방문하는 최단 경로의 길이를 계산하라.

입력

입력은 여러 테스트 케이스로 이루어진다. 각 케이스의 데이터는 3개의 정수 n (4 ≤ n ≤ 100), b1, b2 (0 < b1, b2 < n-1, b1 ≠ b2)를 포함하는 한 줄로 시작한다. 여기서 n은 섬의 수(0부터 n-1까지 번호가 매겨짐)이고 b1과 b2는 두 특별한 섬이다. 이어서 섬 0부터 시작하여 각 섬의 정수 x, y 좌표(0 ≤ x, y ≤ 2000)를 담은 n개의 줄이 주어진다. 두 섬이 같은 x좌표를 가지지 않으며, 섬들은 서쪽에서 동쪽으로(즉, 최소 x좌표에서 최대 x좌표로) 순서대로 나열된다.

마지막 케이스의 입력 뒤에는 3개의 0을 포함하는 줄이 온다.

출력

각 케이스마다 두 줄을 출력한다. 첫 번째 줄에는 케이스 번호와 Wen 선장이 모든 섬을 방문하는 최단 경로의 길이를 소수점 둘째 자리에서 반올림하여 출력한다. 두 번째 줄에는 섬 0과 1로 시작하고 섬 0으로 끝나며, 방문해야 하는 순서대로 섬을 공백으로 구분하여 나열한다. 각 테스트 케이스의 해는 유일하다. 샘플 출력의 형식을 따르라.

예제1

  1. 예제 1

    입력
    5 1 3
    1 3
    3 4
    4 1
    7 5
    8 3
    5 3 2
    0 10
    3 14
    4 7
    7 10
    8 12
    0 0 0
    
    예상 출력
    Case 1: 18.18
    0 1 4 3 2 0
    Case 2: 24.30
    0 1 3 4 2 0