K는 다각형의 케이
시간 제한8초메모리 제한512 MB
정수 좌표의 점 N개가 주어질 때, 모든 점을 내부나 경계에 포함하는 단순 다각형 중 둘레가 K번째로 짧은 값을 구합니다. 그런 다각형이 K개보다 적으면 -1을 출력합니다.
문제
「1번이어야만 하나요? K번이면 안 되는 걸까요?」
이것이 케이 씨의 좌우명이다. 요즘 케이 씨는 다각형에 푹 빠진 듯하다. 눈앞에 펼쳐진 넓은 2차원 평면 위의 개의 점을 보며, 이 점들로 다각형을 만드는 방법을 생각하고 있다.
케이 씨는 개의 점 중 일부를 골라 원하는 순서로 이어서, 고른 점을 꼭짓점으로 하는 다각형을 만들기로 했다. 다각형은 다음 조건을 만족해야 한다.
- 단순 다각형이다. 즉, 꼭짓점이 3개 이상이고, 연속하지 않는 두 변은 어떤 것도 교점을 갖지 않는다.
- 선택되지 않은 점을 포함해 개의 점 모두가 다각형의 내부 또는 둘레 위에 있다.
케이 씨가 원하는 것은 이러한 다각형 중 둘레, 즉 모든 변 길이의 합이 번째로 짧은 다각형이다.
당신의 일은 조건을 만족하는 다각형을 둘레의 오름차순으로 정렬했을 때 번째에 오는 다각형의 둘레를 구하는 프로그램을 작성하는 것이다. 그런 다각형이 개 이상 없을 수도 있는데, 그때는 을 출력한다.
입력
입력은 여러 개의 데이터셋으로 이루어진다. 각 데이터셋은 다음 형식으로 주어진다.
N K
x1 y1
...
xN yN
데이터셋의 첫 줄에는 점의 개수 과 구할 둘레의 순위 가 주어진다. , 는 모두 정수이며, , 이다. 이어지는 개의 줄에는 각 점의 좌표가 주어진다. 번째 줄에는 번째 점의 x좌표 와 y좌표 가 정수로 주어진다. 모든 에 대해 이다.
서로 다른 세 점을 어떻게 골라도 그 세 점을 모두 지나는 직선은 없다고 가정해도 된다. 또 둘레의 오름차순으로 정렬했을 때 번째가 되는 조건 만족 다각형이 존재한다면, 그 다각형은 하나로 정해진다고 가정해도 된다.
입력의 끝은 0 0 두 개로만 이루어진 줄이다. 전체 데이터셋의 수는 50을 넘지 않는다.
출력
주어진 점들로 단순 다각형을 만들 때, 만들 수 있는 단순 다각형 중 둘레가 번째로 짧은 다각형의 둘레를 한 줄에 출력하라. 그런 다각형이 존재하지 않으면 을 출력하라. 결과의 오차는 이상이면 안 된다.