피오르에 다리 놓기

시간 제한5초메모리 제한128 MB

요약
각각 하나의 피오르를 가로지르는 정수 길이 다리를 선택해, 전체 다리 길이가 m을 넘지 않으면서 절약되는 도로 길이를 최대로 만든다.
난이도

어려움10점 중 8점

유형
기하, 동적 계획법, 그리디, 수학
정답자
아직 제출이 없습니다

문제

서쪽 스칸디나비아 해안에는 바다에서 육지 안쪽으로 길게 들어온 좁은 만인 피오르가 많다. 피오르는 양쪽 절벽이 매우 가팔라서, 해안을 따라 난 도로는 피오르를 빙 돌아가야 하므로 이동 거리가 길어진다. 이를 줄이기 위해 피오르를 가로지르는 다리를 놓아 우회 거리를 단축하려고 한다.

다리는 길이가 각각 1미터인 미리 만들어 둔 단위 부품으로 조립하므로, 각 다리의 길이는 항상 정수(미터)이다. 예산 때문에 놓을 수 있는 다리 길이의 총합은 mm미터를 넘을 수 없다. 안전상의 이유로 하나의 다리는 최대 하나의 피오르만 가로지를 수 있다.

각 피오르는 세 점을 잇는 두 선분으로 나타낸다. 가운데 점이 만의 가장 안쪽(꼭짓점)이고, 도로는 한쪽 바깥 점에서 이 꼭짓점을 지나 반대쪽 바깥 점까지 두 선분을 따라 이어진다. 모든 피오르의 꼭짓점 각도는 180∘180^\circ 미만이다.

한 피오르에 놓는 다리는 그 피오르의 두 변 위의 한 점과 다른 한 점을 잇는 곧은 선분이며, 각 변의 어느 지점에 닿게 할지 자유롭게 정할 수 있다. 다리의 길이는 정수여야 한다. 다리를 놓으면 두 끝점 사이의 도로(꼭짓점을 돌아가던 부분)가 다리로 대체되므로, 절약되는 거리는 (없어진 도로의 길이) −- (다리의 길이)이다. 예를 들어 길이 10미터의 다리로 30미터의 옛 도로를 없애면 20미터가 절약된다.

다리 길이 총합이 mm을 넘지 않는 범위에서, 절약되는 도로 길이의 합이 최대가 되도록 다리를 놓아라.

입력

각 테스트 케이스는 두 줄로 이루어진다. 첫 줄에는 피오르의 개수 nn과 놓을 수 있는 다리 길이의 최댓값 mm(미터)이 양의 정수로 주어진다. 다음 줄에는 피오르들을 나타내는 2n+12n+1개의 정수 좌표쌍이 주어지며, 피오르 ii의 마지막 좌표가 피오르 i+1i+1의 첫 좌표가 된다.

모든 좌표는 미터 단위이며 −300000-300000 이상 300000300000 이하의 정수이다. nn의 최댓값은 5050, mm의 최댓값은 30003000이다.

입력은 여러 개의 테스트 케이스로 이루어지며, 0 0인 줄로 끝난다.

출력

각 테스트 케이스마다 한 줄에 케이스 번호, 사용한 다리 길이의 총합, 그리고 최적으로 다리를 놓았을 때 절약되는 도로 길이의 총합을 아래 형식으로 출력한다. 모든 값의 단위는 미터이며, 절약되는 거리는 소수 둘째 자리까지 반올림하여 출력한다.

Case X: L meters used saving S meters

예제1

  1. 예제 1

    입력
    2 6
    0 0 4 2 0 4 2 6 0 8
    2 6
    0 0 4 2 0 4 8 6 0 8
    2 10
    0 0 4 2 0 4 8 6 0 8
    0 0
    
    예상 출력
    Case 1: 6 meters used saving 5.77 meters
    Case 2: 6 meters used saving 14.96 meters
    Case 3: 8 meters used saving 17.44 meters