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

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

가장 짧은 다리

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

요약
두 강기슭 폴리곤과 양쪽에 위치한 점 s, t가 주어질 때, 다리 길이를 최소로 하고 그다음 도로 길이 합을 최소로 하는 고속도로의 총 길이를 구한다.
난이도

어려움10점 중 8점

유형
기하, 완전 탐색, 구현, 수학
정답자
아직 제출이 없습니다

문제

도시는 한 변의 길이가 1,000인 정사각형 모양이다. 도시 한가운데를 큰 강이 북쪽에서 남쪽으로 흐르고, 강은 도시를 서쪽과 동쪽 두 부분으로 나눈다.

시장은 서쪽 지점 ss와 동쪽 지점 tt를 잇는 고속도로를 놓기로 했다. 고속도로는 강을 건너는 다리 하나와 도로 두 개로 이루어진다. 도로 하나는 ss와 다리의 서쪽 끝을 잇고, 나머지 하나는 tt와 다리의 동쪽 끝을 잇는다. 다리는 서쪽 강기슭 위의 한 점과 동쪽 강기슭 위의 한 점을 잇는 선분이다. 도로는 직선이 아니어도 되지만, 강과 겹치는 부분의 길이는 0이어야 한다.

건설비를 아끼려고 시장은 다음 두 조건을 지키는 고속도로를 놓는다.

  • 다리가 도로보다 비싸므로, 서쪽과 동쪽을 잇는 다리의 길이가 먼저 최소여야 한다.
  • 그 조건 아래에서 도로 두 개의 길이 합이 최소여야 한다.

두 조건을 만족하는 고속도로의 전체 길이를 구하는 프로그램을 작성하시오.

입력

입력은 테스트 케이스 하나로 이루어지며, 형식은 다음과 같다.

sx sy tx ty
N
wx1 wy1
:
:
wxN wyN
M
ex1 ey1
:
:
exM eyM

도시 안의 점은 좌표 (x,y)(x, y)로 나타낸다. xx는 서쪽 변에서 잰 거리이고, yy는 북쪽 변에서 잰 거리이다.

첫째 줄에 네 정수 sxs_x, sys_y, txt_x, tyt_y가 주어진다(0≤sx,sy,tx,ty≤10000 \le s_x, s_y, t_x, t_y \le 1000). 점 ss는 (sx,sy)(s_x, s_y)에 있고, 점 tt는 (tx,ty)(t_x, t_y)에 있다. 다음 줄에 서쪽 강기슭을 이루는 점의 개수 NN이 주어진다(2≤N≤202 \le N \le 20). 이어지는 NN개 줄에 두 정수 wxiwx_i와 wyiwy_i가 주어지며(0≤wxi,wyi≤10000 \le wx_i, wy_i \le 1000), 서쪽 강기슭의 ii번째 점은 (wxi,wyi)(wx_i, wy_i)이다. 서쪽 강기슭은 1≤i≤N−11 \le i \le N-1인 모든 ii에 대해 (wxi,wyi)(wx_i, wy_i)와 (wxi+1,wyi+1)(wx_{i+1}, wy_{i+1})을 이은 선분으로 만들어진 꺾은선이다. 다음 줄에 동쪽 강기슭을 이루는 점의 개수 MM이 주어진다(2≤M≤202 \le M \le 20). 이어지는 MM개 줄에 두 정수 exiex_i와 eyiey_i가 주어지며(0≤exi,eyi≤10000 \le ex_i, ey_i \le 1000), 동쪽 강기슭의 ii번째 점은 (exi,eyi)(ex_i, ey_i)이다. 동쪽 강기슭도 같은 방식으로 만들어진 꺾은선이다.

입력은 다음 조건을 만족한다.

  • wy1wy_1과 ey1ey_1은 0이고, wyNwy_N과 eyMey_M은 1,000이다.
  • 각 꺾은선은 자기 자신과 만나지 않는다.
  • 서쪽 강기슭과 동쪽 강기슭은 서로 만나지 않는다.
  • 점 ss는 도시의 서쪽 부분에 있다. 즉 ss는 정사각형의 변과 서쪽 강기슭 꺾은선으로 둘러싸인 영역 가운데 동쪽 강기슭의 점을 포함하지 않는 쪽에 있다.
  • 점 tt는 도시의 동쪽 부분에 있다. 즉 tt는 정사각형의 변과 동쪽 강기슭 꺾은선으로 둘러싸인 영역 가운데 서쪽 강기슭의 점을 포함하지 않는 쪽에 있다.
  • 각 꺾은선은 정사각형과 양 끝점에서만 만난다. 즉 2≤i≤N−12 \le i \le N-1에서 0<wxi,wyi<10000 < wx_i, wy_i < 1000이고, 2≤i≤M−12 \le i \le M-1에서 0<exi,eyi<10000 < ex_i, ey_i < 1000이다.

출력

한 줄에 다리의 길이와 고속도로의 전체 길이를 공백 하나로 구분해 출력한다. 고속도로의 전체 길이는 다리 하나와 도로 두 개의 길이를 모두 더한 값이다. 두 값 모두 소수점 아래 넷째 자리까지 출력한다.

예제4

  1. 예제 1

    입력
    200 500 800 500
    3
    400 0
    450 500
    400 1000
    3
    600 0
    550 500
    600 1000
    
    예상 출력
    100.0000 600.0000
    
  2. 예제 2

    입력
    300 300 700 100
    5
    300 0
    400 100
    300 200
    400 300
    400 1000
    4
    700 0
    600 100
    700 200
    700 1000
    
    예상 출력
    200.0000 541.4214
    
  3. 예제 3

    입력
    300 400 700 600
    2
    400 0
    400 1000
    2
    600 0
    600 1000
    
    예상 출력
    200.0000 482.8427
    
  4. 예제 4

    입력
    200 500 800 500
    3
    400 0
    450 500
    400 1000
    5
    600 0
    550 500
    600 100
    650 500
    600 1000
    
    예상 출력
    100.0000 1200.3265