가장 가까운 점 쌍

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

요약
두 점 집합이 각각 수평선 위에 있을 때, P와 Q 사이 맨해튼 거리의 최솟값과 그 최솟값을 이루는 서로 다른 쌍의 개수를 구한다.
난이도

보통10점 중 6점

유형
정렬, 투 포인터, 배열
정답자
아직 제출이 없습니다

문제

평면 위의 유한한 점 집합 PP와 QQ가 주어진다. p∈Pp \in P, q∈Qq \in Q인 점 쌍 (p,q)(p, q) 가운데 두 점의 거리가 가장 작은 쌍을 PP와 QQ의 가장 가까운 쌍이라고 한다.

이 문제에서 두 점 aa와 bb의 거리는 다음과 같이 정의한다.

d(a,b)=∣xa−xb∣+∣ya−yb∣d(a, b) = |x_a - x_b| + |y_a - y_b|

여기서 xax_a와 yay_a는 점 aa의 xx좌표와 yy좌표이고, xbx_b와 yby_b는 점 bb의 xx좌표와 yy좌표다. 즉 p∈Pp \in P, q∈Qq \in Q인 쌍 (p,q)(p, q)가 가장 가까운 쌍이라는 것은 다음과 같다.

d(p,q)=min⁡{d(p′,q′):p′∈P, q′∈Q}d(p, q) = \min \{ d(p', q') : p' \in P,\ q' \in Q \}

두 집합 PP와 QQ가 주어지면 가장 가까운 쌍의 거리와 서로 다른 가장 가까운 쌍의 개수를 구하는 프로그램을 작성하라. PP에서 고른 점이 다르거나 QQ에서 고른 점이 다르면 서로 다른 쌍으로 센다.

입력으로 주어지는 점은 다음 두 성질을 만족한다.

  1. 어떤 정수 c1c_1과 c2c_2가 있어서 PP의 모든 점은 직선 y=c1y = c_1 위에 있고, QQ의 모든 점은 직선 y=c2y = c_2 위에 있다.
  2. PP의 서로 다른 두 점은 좌표가 다르고, QQ의 서로 다른 두 점도 좌표가 다르다.

입력

입력은 표준 입력으로 받는다. 입력은 네 줄이다.

첫째 줄에 정수 nn과 mm이 주어진다 (1≤n≤5×1051 \le n \le 5 \times 10^5, 1≤m≤5×1051 \le m \le 5 \times 10^5). nn은 집합 PP의 점 개수이고, mm은 집합 QQ의 점 개수다.

둘째 줄에 정수 c1c_1과 c2c_2가 공백 하나를 사이에 두고 순서대로 주어진다 (−108≤c1,c2≤108-10^8 \le c_1, c_2 \le 10^8).

셋째 줄에 −108-10^8 이상 10810^8 이하의 서로 다른 정수 nn개가 공백 하나로 구분되어 주어진다. 이 값은 집합 PP에 속한 점의 xx좌표이고, yy좌표는 모두 c1c_1이다.

넷째 줄에 −108-10^8 이상 10810^8 이하의 서로 다른 정수 mm개가 공백 하나로 구분되어 주어진다. 이 값은 집합 QQ에 속한 점의 xx좌표이고, yy좌표는 모두 c2c_2다.

출력

출력은 표준 출력으로 한다. 한 줄에 정수 두 개를 공백 하나로 구분해 출력한다. 첫 번째 정수는 PP와 QQ의 가장 가까운 쌍의 거리이고, 두 번째 정수는 가장 가까운 쌍의 개수다.

예제4

  1. 예제 1

    입력
    3 4
    1 -3
    3 0 6
    -2 5 4 2
    
    예상 출력
    5 3
    
  2. 예제 2

    입력
    5 5
    1 2
    -4 -10 -2 0 -1
    3 18 0 1 5
    
    예상 출력
    1 1
    
  3. 예제 3

    입력
    1 1
    0 0
    0
    0
    
    예상 출력
    0 1
    
  4. 예제 4

    입력
    1 1
    -100000000 100000000
    -100000000
    100000000
    
    예상 출력
    400000000 1