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

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

다리

면접 대비

시간 제한3초메모리 제한128 MB

요약
좌우 강변에 있는 집들의 모든 쌍이 다리를 건너 이동하는 거리 합을 최소로 만드는 높이를 구합니다.
난이도

보통10점 중 5점

유형
정렬, 수학
정답자
아직 제출이 없습니다

문제

도시를 북쪽에서 남쪽으로 흐르는 두 개의 강이 있고, 각 강을 따라 집들이 그림처럼 늘어서 있다. 양쪽 강가에 사는 사람들이 서로 더 빨리 오갈 수 있도록, 두 강을 잇는 다리를 하나 놓으려고 한다.

왼쪽 강은 세로선 x=−1x = -1이고, 오른쪽 강은 세로선 x=1x = 1이다. 다리는 두 강 위의 한 지점씩을 잇는, xx축에 평행한 선분으로 나타낸다. 집의 위치는 각 세로선 위의 점으로 주어진다.

왼쪽 집들은 (−1,ai)(-1, a_i) (i=1,…,ni = 1, \dots, n)에, 오른쪽 집들은 (1,bj)(1, b_j) (j=1,…,mj = 1, \dots, m)에 있다. 다리를 높이 hh에 놓으면(즉 두 점 (−1,h)(-1, h)와 (1,h)(1, h)를 잇는 다리), 왼쪽 집 aia_i에서 다리를 건너 오른쪽 집 bjb_j까지 가는 거리는 ∣ai−h∣+2+∣h−bj∣|a_i - h| + 2 + |h - b_j|이다.

모든 (왼쪽 집, 오른쪽 집) 쌍에 대한 이 거리의 합

∑i,jd(ai,bj)=∑i,j(∣ai−h∣+2+∣h−bj∣)\sum_{i,j} d(a_i, b_j) = \sum_{i,j} \left( |a_i - h| + 2 + |h - b_j| \right)

을 최소로 만드는 다리의 높이 hh를 구하는 프로그램을 작성하라.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다.

각 테스트 케이스의 첫째 줄에는 두 정수 nn과 mm이 주어진다 (1≤n,m≤1061 \le n, m \le 10^6). nn은 왼쪽 강의 집 수, mm은 오른쪽 강의 집 수이다. 이어지는 nn개의 줄에는 왼쪽 집의 위치 aia_i가 한 줄에 하나씩, 그다음 mm개의 줄에는 오른쪽 집의 위치 bjb_j가 한 줄에 하나씩 주어진다 (∣ai∣,∣bj∣≤107|a_i|, |b_j| \le 10^7). 모든 위치는 정수이다.

출력

각 테스트 케이스마다 거리의 합을 최소로 만드는 높이 hh를 소수점 첫째 자리까지 한 줄에 출력한다. 그런 hh가 여러 개이면 가장 작은 값을 출력한다.

예제1

  1. 예제 1

    입력
    2
    3 4
    30
    -16
    5
    -5
    25
    -20
    -10
    4 7
    18
    -15
    -3
    2
    8
    20
    12
    -3
    18
    9
    4
    
    예상 출력
    -5.0
    4.0