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

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

히스토그램 안의 최단 경로

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

요약
직선 히스토그램 다각형에서 밑변 꼭짓점과 경계 점 사이의 최단 내부 경로 길이 합을 구합니다.
난이도

어려움10점 중 8점

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

문제

히스토그램은 경계가 두 사슬로 이루어진 단순 직교 다각형이다. 위쪽 사슬은 가로축에 대해 단조이고, 아래쪽 사슬은 수평 선분 하나이다. 이 수평 선분을 밑변이라고 한다.

그림 1. 히스토그램과 밑변 (v0,v1)(v_0, v_1)

히스토그램 PP의 꼭짓점 nn개를 경계를 따라 반시계 방향으로 나열한 것을 (v0,v1,…,vn−1)(v_0, v_1, \dots, v_{n-1})이라고 하자. 밑변은 (v0,v1)(v_0, v_1)이다. 변 eie_i는 꼭짓점 viv_i와 vi+1v_{i+1}을 잇는 선분이고, i=0,1,…,n−1i = 0, 1, \dots, n-1이며 vn=v0v_n = v_0이다.

PP 안의 경로는 PP의 외부와 만나지 않는 단순 경로이다. 경로의 길이는 경로를 이루는 선분의 유클리드 길이를 모두 더한 값이다. PP 위의 두 점 pp와 qq 사이의 거리는 PP 안에서 두 점을 잇는 최단 경로의 길이이다. 경계 위의 점 p(k,d)p(k, d)는 변 eke_k 위에 있으면서 vkv_k에서의 거리가 dd인 점을 뜻한다.

그림 1의 히스토그램에서 v0v_0과 q1=p(10,2)q_1 = p(10, 2) 사이의 최단 경로는 v0v_0, v14v_{14}, v12v_{12}, q1q_1을 차례로 잇는 꺾은선이고, 길이는 8.5952428.595242이다. v0v_0과 q2=p(1,1)q_2 = p(1, 1) 사이의 최단 경로는 두 점을 곧바로 잇는 선분이고, 길이는 15.03329615.033296이다.

꼭짓점이 nn개인 히스토그램 PP와 그 경계 위의 점 mm개로 이루어진 집합 SS가 주어진다. v0v_0과 SS의 모든 점 사이의 거리를 구하는 프로그램을 작성하시오.

입력

입력은 표준 입력으로 주어진다. 첫째 줄에 테스트 케이스의 개수 TT가 주어진다.

각 테스트 케이스의 첫째 줄에는 히스토그램 P=(v0,v1,…,vn−1)P = (v_0, v_1, \dots, v_{n-1})의 꼭짓점 개수 nn이 주어진다. (4≤n≤100 0004 \le n \le 100\,000)

다음 nn개의 줄에 v0v_0부터 vn−1v_{n-1}까지 꼭짓점이 한 줄에 하나씩 주어진다. 각 줄에는 그 꼭짓점의 x좌표와 y좌표를 나타내는 정수 두 개가 주어지고, 두 좌표 모두 00 이상 1 000 0001\,000\,000 이하이다. (v0,v1)(v_0, v_1)이 밑변이다.

다음 줄에 집합 SS의 크기 mm이 주어진다. (1≤m≤100 0001 \le m \le 100\,000)

다음 mm개의 줄에 SS의 점 p(k,d)p(k, d)가 한 줄에 하나씩 정수 두 개 kk와 dd로 주어진다. (0≤k≤n−10 \le k \le n-1, 0≤d<0 \le d < 변 eke_k의 길이) SS의 점은 모두 서로 다르다.

출력

출력은 표준 출력으로 한다. 각 테스트 케이스마다 한 줄에 v0v_0과 SS의 모든 점 사이의 거리를 더한 값을 출력한다. 소수점 아래 둘째 자리에서 반올림해 소수점 아래 첫째 자리까지 정확히 출력한다.

두 점 p=(x1,y1)p = (x_1, y_1)과 q=(x2,y2)q = (x_2, y_2) 사이의 유클리드 거리는 (x2−x1)2+(y2−y1)2\sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}이다.

예제2

  1. 예제 1

    입력
    2
    16
    0 0
    15 0
    15 4
    13 4
    13 6
    10 6
    10 2
    7 2
    7 5
    6 5
    6 7
    3 7
    3 3
    2 3
    2 1
    0 1
    2
    10 2
    1 1
    8
    100000 100000
    400000 100000
    400000 200000
    300000 200000
    300000 300000
    200000 300000
    200000 200000
    100000 200000
    8
    1 0
    2 0
    3 0
    4 0
    5 0
    6 0
    7 0
    1 50000
    
    예상 출력
    23.6
    1909658.1
    
  2. 예제 2

    입력
    1
    4
    0 0
    10 0
    10 5
    0 5
    8
    0 0
    0 4
    1 0
    1 3
    2 0
    2 6
    3 0
    3 2
    
    예상 출력
    50.0