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

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

우회 없애기

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

요약
꺾은선으로 주어진 트랙에서 첫 점부터 마지막 점까지 트랙 위만 따라 이동하는 최단 거리를 양방향 진행을 허용해 구한다.
난이도

어려움10점 중 8점

유형
기하, 그래프, 최단 경로, 정렬
정답자
아직 제출이 없습니다

문제

택배 회사는 자전거 라이더를 고용해 대도시 곳곳에 소포를 배달하고, 라이더에게는 이동한 총 거리에 비례해 배달료를 지급한다. 모든 회사 자전거에는 몇 초에 한 번씩 자신의 위치를 기록하는 GPS 장치가 달려 있다. 한 번의 배달에서 기록된 위치들의 수열을 트랙(track)이라 부르며, 트랙의 길이는 연속한 두 기록점 사이의 유클리드 거리를 모두 더한 값으로, 이 값이 배달료 계산의 기준이 된다.

최근 감사에서 일부 트랙이 스스로 교차한다는 사실이 드러났는데, 이는 일부 라이더가 불필요하게 우회했음을 뜻한다. 주어진 트랙에 대해, 첫 번째 기록점에서 마지막 기록점까지 갈 수 있는 가장 짧은 경로의 길이를 구하는 프로그램을 작성하라. 이 경로는 반드시 원래 트랙 위에만 존재해야 하며, 트랙을 따라 원래 방향으로든 반대 방향으로든 이동할 수 있다.

입력

첫째 줄에 처리할 트랙의 개수 TT가 주어진다.

각 트랙은 트랙을 정의하는 기록점의 개수인 양의 정수 NN이 적힌 줄로 시작한다. 이어지는 NN개의 줄에는 각각 공백 하나로 구분된 두 정수가 있으며, 이는 트랙 위 한 점의 xx좌표와 yy좌표(단위: 미터)를 나타낸다. 점들은 기록된 순서대로 나열된다.

연속한 두 점은 하나의 선분을 이룬다. 연속한 두 점 사이의 거리는 30미터 이하이며, 각 선분은 다른 선분과 최대 20개까지만 교차한다. 모든 좌표는 -10,000,000 이상 10,000,000 이하의 정수이고, NN은 1≤N≤1000001 \le N \le 100000을 만족한다.

출력

각 트랙에 대해, 가장 짧은 경로의 길이(미터)를 가장 가까운 정수로 반올림하여 한 줄에 하나씩 출력한다.

힌트

양의 실수 R.xyzR.xyz를 가장 가까운 정수로 반올림하는 규칙:

  • 소수 첫째 자리 xx가 5보다 작으면 반올림한 값은 RR이다.
  • 그렇지 않으면 반올림한 값은 R+1R+1이다.

예제1

  1. 예제 1

    입력
    2
    5
    0 0
    12 0
    20 0
    10 10
    10 -10
    6
    0 0
    15 0
    10 -5
    4 1
    10 1
    10 -10
    
    예상 출력
    20
    17