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

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

최소 스칼라곱 (작은 입력)

면접 대비

시간 제한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≤10001 \le T \le 1000
  • 1≤n≤81 \le n \le 8
  • −1000≤xi,yi≤1000-1000 \le x_i, y_i \le 1000

출력

각 테스트 케이스마다 한 줄에

Case #X: Y

를 출력한다. XX는 1부터 시작하는 테스트 케이스 번호이고, YY는 주어진 두 벡터의 모든 순열 중 최소 스칼라곱이다.

예제2

  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

    입력
    3
    1
    -1000
    1000
    1
    1000
    1000
    1
    0
    -1000
    
    예상 출력
    Case #1: -1000000
    Case #2: 1000000
    Case #3: 0