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

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

최소 스칼라 곱 (Large)

면접 대비

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

요약
길이가 같은 두 정수 벡터의 좌표를 임의로 재배열해 스칼라 곱이 최소가 되게 만들고, 그 최솟값을 각 테스트 케이스마다 구한다.
난이도

보통10점 중 4점

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

문제

길이가 같은 두 정수 벡터 v1=(x1,x2,…,xn)v_1 = (x_1, x_2, \dots, x_n)과 v2=(y1,y2,…,yn)v_2 = (y_1, y_2, \dots, y_n)이 주어진다. 두 벡터의 스칼라 곱은 x1y1+x2y2+⋯+xnynx_1 y_1 + x_2 y_2 + \dots + x_n y_n으로 계산하는 하나의 수이다.

각 벡터의 좌표 순서는 원하는 대로 바꿀 수 있다. 두 벡터의 좌표를 각각 재배열해서 스칼라 곱을 가장 작게 만들고, 그 최솟값을 출력한다.

입력

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

각 테스트 케이스는 세 줄로 이루어진다. 첫 줄에 정수 nn이 주어지고, 다음 두 줄에 각각 nn개의 정수가 주어진다. 두 번째 줄은 v1v_1의 좌표, 세 번째 줄은 v2v_2의 좌표이다.

제한

  • 1≤T≤101 \le T \le 10
  • 1≤n≤8001 \le n \le 800
  • −100000≤xi,yi≤100000-100000 \le x_i, y_i \le 100000

출력

각 테스트 케이스마다 한 줄에 다음 형식으로 출력한다.

Case #X: Y

XX는 1부터 시작하는 테스트 케이스 번호이고, YY는 두 벡터의 좌표를 재배열해서 얻을 수 있는 스칼라 곱의 최솟값이다.

예제3

  1. 예제 1

    입력
    2
    3
    1 3 -5
    -2 4 1
    5
    1 2 3 4 5
    1 0 1 0 1
    
    예상 출력
    Case #1: -25
    Case #2: 6
    
  2. 예제 2

    입력
    1
    1
    100000
    -100000
    
    예상 출력
    Case #1: -10000000000
    
  3. 예제 3

    입력
    3
    2
    100000 100000
    100000 100000
    2
    -100000 -100000
    -100000 -100000
    2
    100000 -100000
    -100000 100000
    
    예상 출력
    Case #1: 20000000000
    Case #2: 20000000000
    Case #3: -20000000000