가장 짧은 다리
시간 제한5초메모리 제한512 MB
두 강기슭 폴리곤과 양쪽에 위치한 점 s, t가 주어질 때, 다리 길이를 최소로 하고 그다음 도로 길이 합을 최소로 하는 고속도로의 총 길이를 구한다.
문제
도시는 한 변의 길이가 1,000인 정사각형 모양이다. 도시 한가운데를 큰 강이 북쪽에서 남쪽으로 흐르고, 강은 도시를 서쪽과 동쪽 두 부분으로 나눈다.
시장은 서쪽 지점 와 동쪽 지점 를 잇는 고속도로를 놓기로 했다. 고속도로는 강을 건너는 다리 하나와 도로 두 개로 이루어진다. 도로 하나는 와 다리의 서쪽 끝을 잇고, 나머지 하나는 와 다리의 동쪽 끝을 잇는다. 다리는 서쪽 강기슭 위의 한 점과 동쪽 강기슭 위의 한 점을 잇는 선분이다. 도로는 직선이 아니어도 되지만, 강과 겹치는 부분의 길이는 0이어야 한다.
건설비를 아끼려고 시장은 다음 두 조건을 지키는 고속도로를 놓는다.
- 다리가 도로보다 비싸므로, 서쪽과 동쪽을 잇는 다리의 길이가 먼저 최소여야 한다.
- 그 조건 아래에서 도로 두 개의 길이 합이 최소여야 한다.
두 조건을 만족하는 고속도로의 전체 길이를 구하는 프로그램을 작성하시오.
입력
입력은 테스트 케이스 하나로 이루어지며, 형식은 다음과 같다.
sx sy tx ty
N
wx1 wy1
:
:
wxN wyN
M
ex1 ey1
:
:
exM eyM
도시 안의 점은 좌표 로 나타낸다. 는 서쪽 변에서 잰 거리이고, 는 북쪽 변에서 잰 거리이다.
첫째 줄에 네 정수 , , , 가 주어진다(). 점 는 에 있고, 점 는 에 있다. 다음 줄에 서쪽 강기슭을 이루는 점의 개수 이 주어진다(). 이어지는 개 줄에 두 정수 와 가 주어지며(), 서쪽 강기슭의 번째 점은 이다. 서쪽 강기슭은 인 모든 에 대해 와 을 이은 선분으로 만들어진 꺾은선이다. 다음 줄에 동쪽 강기슭을 이루는 점의 개수 이 주어진다(). 이어지는 개 줄에 두 정수 와 가 주어지며(), 동쪽 강기슭의 번째 점은 이다. 동쪽 강기슭도 같은 방식으로 만들어진 꺾은선이다.
입력은 다음 조건을 만족한다.
- 과 은 0이고, 과 은 1,000이다.
- 각 꺾은선은 자기 자신과 만나지 않는다.
- 서쪽 강기슭과 동쪽 강기슭은 서로 만나지 않는다.
- 점 는 도시의 서쪽 부분에 있다. 즉 는 정사각형의 변과 서쪽 강기슭 꺾은선으로 둘러싸인 영역 가운데 동쪽 강기슭의 점을 포함하지 않는 쪽에 있다.
- 점 는 도시의 동쪽 부분에 있다. 즉 는 정사각형의 변과 동쪽 강기슭 꺾은선으로 둘러싸인 영역 가운데 서쪽 강기슭의 점을 포함하지 않는 쪽에 있다.
- 각 꺾은선은 정사각형과 양 끝점에서만 만난다. 즉 에서 이고, 에서 이다.
출력
한 줄에 다리의 길이와 고속도로의 전체 길이를 공백 하나로 구분해 출력한다. 고속도로의 전체 길이는 다리 하나와 도로 두 개의 길이를 모두 더한 값이다. 두 값 모두 소수점 아래 넷째 자리까지 출력한다.