문제
우솔이는 충남대학교의 넓은 부지가 너무 탁 트여 있어 관리가 어렵다는 사실을 깨달았다. 그는 부지를 더 작은 영역으로 나누어 관리하기 위해 수직(남북) 방향과 수평(동서) 방향으로 울타리를 설치했다.
전체 부지는 과 를 꼭짓점으로 하는 직사각형 모양이다. 우솔이는 서로 다른 위치 ()에 개의 수직 울타리를 설치했다. 각 수직 울타리는 에서 까지 이어진다. 또한, 서로 다른 위치 ()에 개의 수평 울타리를 설치했다. 각 수평 울타리는 에서 까지 이어진다. 모든 수직 울타리는 모든 수평 울타리와 교차하며, 결과적으로 전체 부지는 총 개의 작은 영역으로 나뉜다.
불행히도 우솔이는 울타리에 문을 만드는 것을 완전히 잊어버렸다! 이대로라면 각 영역에 갇힌 사람들이 다른 영역으로 이동하는 것이 불가능하다. 우솔이는 이 상황을 해결하기 위해 울타리의 일부 조각을 제거하여 인접한 영역 사이를 이동할 수 있게 만들려고 한다. 그는 특정 인접한 두 영역을 선택하고, 그 사이를 가로막는 울타리 조각 전체를 제거할 계획이다. 모든 작업이 끝난 후에는 모든 영역 사이를 자유롭게 이동할 수 있어야 한다.
예를 들어, 울타리가 다음과 같이 설치되어 있을 때:
+---+--+
| | |
+---+--+
| | |
| | |
+---+--+
일부 조각을 제거하여 다음과 같이 만들 수 있다:
+---+--+
| |
+---+ +
| |
| |
+---+--+
우솔이가 모든 영역을 연결하기 위해 제거해야 하는 울타리의 최소 총 길이를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 네 정수 이 공백으로 구분되어 주어진다. (; )
이어서 개의 줄에는 수직 울타리의 위치 이 한 줄에 하나씩 주어진다.
그 다음 개의 줄에는 수평 울타리의 위치 이 한 줄에 하나씩 주어진다.
출력
우솔이가 제거해야 하는 울타리의 최소 총 길이를 출력한다. 결과값이 매우 클 수 있으므로, C/C++의 long long과 같은 64비트 정수 자료형을 사용해야 할 수도 있다.
예제 입력 1
15 15 5 2
2
5
10
6
4
11
3
예제 출력 1
44
코드를 제출하려면 로그인이 필요합니다.
로그인