#269
Unrated
울타리 제거
원문: English
시간 제한
2s
메모리 제한
1024MB
제출
0
정답
0
맞힌 사람
0
정답 비율
0.0%

문제

종현이는 자신의 커다란 사각형 모양의 부지가 너무 넓어 효율적으로 관리하기 어렵다는 사실을 깨달았다. 그는 부지를 더 작은 영역으로 나누어 관리하기 위해 수직(남북 방향) 울타리와 수평(동서 방향) 울타리를 설치했다.

커다란 부지는 꼭짓점이 (0,0)(0, 0)(A,B)(A, B)인 직사각형 모양이다. 종현이는 서로 다른 위치 a1,,ana_1, \dots, a_n (0<ai<A0 < a_i < A)에 nn개의 수직 울타리(0n20000 \le n \le 2\,000)를 설치했다. 각 수직 울타리는 (ai,0)(a_i, 0)부터 (ai,B)(a_i, B)까지 이어진다. 또한, 서로 다른 위치 b1,,bmb_1, \dots, b_m (0<bi<B0 < b_i < B)에 mm개의 수평 울타리(0m20000 \le m \le 2\,000)를 설치했다. 각 수평 울타리는 (0,bi)(0, b_i)부터 (A,bi)(A, b_i)까지 이어진다. 모든 수직 울타리는 모든 수평 울타리와 교차하며, 결과적으로 부지는 총 (n+1)(m+1)(n+1)(m+1)개의 작은 영역으로 나뉜다.

불행히도 종현이는 울타리에 문을 만드는 것을 완전히 잊어버렸다. 이대로라면 각 영역에 갇힌 사람들이 다른 영역으로 이동하거나 부지 전체를 돌아다니는 것이 불가능하다! 종현이는 인접한 두 영역 사이의 울타리 일부를 제거하여 사람들이 모든 영역 사이를 자유롭게 이동할 수 있도록 하려 한다. 그는 인접한 두 영역을 골라 그 사이를 가로막는 울타리 구간을 통째로 제거할 수 있다. 울타리를 제거한 후에는 사람들이 이 개방된 틈을 통해 인접한 영역으로 이동할 수 있으며, 최종적으로 부지의 어느 곳이든 갈 수 있어야 한다.

예를 들어, 종현이가 아래와 같이 울타리를 설치했다고 하자.

+---+--+
|   |  |
+---+--+
|   |  |
|   |  |
+---+--+

종현이는 다음과 같이 울타리의 일부 구간들을 제거하여 모든 곳을 연결할 수 있다.

+---+--+
|      |
+---+  +
|      |
|      |
+---+--+

종현이가 목표를 달성하기 위해 제거해야 하는 울타리 길이의 합의 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 A,B,n,mA, B, n, m이 공백으로 구분되어 주어진다. (1A,B10000000001 \le A, B \le 1\,000\,000\,000; 0n,m20000 \le n, m \le 2\,000)

이어서 nn개의 줄에 수직 울타리의 위치를 나타내는 a1,,ana_1, \dots, a_n이 한 줄에 하나씩 주어진다. (0<ai<A0 < a_i < A)

그 다음 mm개의 줄에 수평 울타리의 위치를 나타내는 b1,,bmb_1, \dots, b_m이 한 줄에 하나씩 주어진다. (0<bi<B0 < b_i < B)

출력

종현이가 제거해야 하는 울타리 길이의 최솟값을 출력한다. 결과값이 32비트 정수 범위를 초과할 수 있으므로 C/C++에서는 long long과 같은 64비트 정수형을 사용해야 한다.

예제 입력 1

15 15 5 2
2
5
10
6
4
11
3

예제 출력 1

44
코드 제출

코드를 제출하려면 로그인이 필요합니다.

로그인
내 제출
제출 내역이 없습니다.
맞은 사람
아직 맞은 사람이 없습니다.
난이도 투표
Unrated0명 투표
로그인 후 AC 받으면 투표할 수 있습니다.
전체 제출
제출 내역이 없습니다.