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

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

슈퍼 컴퓨터

시간 제한1초메모리 제한256 MB

요약
N개 프로그램의 실행 순서를 정하고 그중 하나를 1시간으로 줄여, 마감 시각 대비 최대 지각 시간을 최소화한다.
난이도

보통10점 중 6점

유형
그리디, 정렬, 이분 탐색, 구현
정답자
아직 제출이 없습니다

문제

당신은 슈퍼 컴퓨터에서 총 N개의 프로그램을 순차적으로 실행하는 실험을 해야 한다.

프로그램에는 1번부터 N번까지 번호가 매겨져 있다. i번 프로그램은 H[i]시간 동안 실행되며, 이 프로그램의 희망 데드라인은 지금부터 D[i]시간 후다.

프로그램이 N개이므로 실행 순서는 총 N! 가지가 가능하다.

i번 프로그램이 끝나는 시각을 지금부터 C[i]시간 후라고 하자. max(0, C[i] - D[i])를 i번 프로그램의 "지각도"라고 부르자. 희망 데드라인보다 늦게 끝나지 않았다면 지각도는 0이다.

"최대 지각도"는 N개 프로그램의 지각도 중 최댓값으로 정의한다.

이 슈퍼 컴퓨터에는 특이한 기능이 하나 있다. N개의 프로그램 중 정확히 하나를 "최우선 처리 대상"으로 지정하면, 그 프로그램은 무조건 1시간 만에 실행된다.

예를 들어 N = 3, H = [2, 4, 6], D = [3, 5, 8]이라 하자.

1번부터 3번 프로그램까지 순서대로 실행하고 3번 프로그램의 실행시간을 1시간으로 지정했다면, 1번 프로그램은 지금부터 시작하여 2시간 후에 끝나고 (C[1] = 2), 2번은 그로부터 4시간 후에 끝나며 (C[2] = 6), 3번은 그로부터 1시간 후에 끝나서 C[3] = 7이 된다. 이때 각 프로그램의 지각도는 0, 1, 0이고 최댓값이 1이므로 최대 지각도는 1이다.

같은 예제에서 3번 프로그램부터 1번 프로그램까지 역순으로 실행하고 3번 프로그램의 실행시간을 1시간으로 지정했다면, 3번 프로그램은 지금부터 시작하여 1시간 후에 끝나고 (C[3] = 1), 2번은 그로부터 4시간 후에 끝나며 (C[2] = 5), 1번은 그로부터 2시간 후에 끝나서 C[1] = 7이 된다. 이때 각 프로그램의 지각도는 4, 0, 0이고 최댓값이 4이므로 최대 지각도는 4이다.

이 예제에서는 첫 번째 방법이 최대 지각도를 최소화하는 방법이다.

N개 프로그램의 실행시간과 희망 데드라인이 주어졌을 때, 달성 가능한 최대 지각도의 최솟값을 구하시오.

입력

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

각 테스트 케이스는 세 줄로 주어진다. 첫 줄에 프로그램의 수 N이 주어진다.

둘째 줄에 N개의 정수가 공백으로 구분되어 주어지며, 실행시간 H[i]를 나타낸다.

셋째 줄에 N개의 정수가 공백으로 구분되어 주어지며, 희망 데드라인 D[i]를 나타낸다.

출력

각 테스트 케이스마다 달성 가능한 최대 지각도의 최솟값을 출력한다.

제한

  • 1 ≤ T ≤ 10
  • 2 ≤ N ≤ 100,000
  • 1 ≤ H[i], D[i] ≤ 1,000

예제1

  1. 예제 1

    입력
    4
    3
    2 4 6
    3 5 8
    3
    4 9 1
    10 9 20
    3
    4 3 5
    2 1 3
    5
    8 1 2 6 2
    8 9 6 2 1
    
    예상 출력
    1
    0
    5
    5