12724
#include <stdio.h>
#include <stdlib.h>
// 오름차순
int asc_cmp (const void *a, const void *b){
return *(int *)a - *(int *)b;
}
// 내림차순
int des_cmp (const void *a, const void *b){
return *(int *)b - *(int *)a;
}
int main(void){
// 테스트 케이스 입력
int test_case = 0;
scanf("%d", &test_case);
for(int i = 0; i < test_case; i++){
// 벡터의 정수 개수
int num = 0;
scanf("%d", &num);
// 벡터1 입력받고 오름차순 정렬
int *arr1 = (int *)malloc(sizeof(int)*num);
for(int j = 0; j < num; j++){
scanf("%d", &arr1[j]);
}
qsort(arr1, num, sizeof(int), asc_cmp);
// 벡터2 입력받고 내림차순 정렬
int *arr2 = (int *)malloc(sizeof(int)*num);
for(int j = 0; j < num; j++){
scanf("%d", &arr2[j]);
}
qsort(arr2, num, sizeof(int), des_cmp);
// 스칼라 곱 구하기
long long scalar_product = 0;
for(int j = 0; j < num; j++){
scalar_product += (long long)arr1[j]*(long long)arr2[j];
}
// 출력
printf("Case #%d: %lld\n", i+1, scalar_product);
free(arr1);
free(arr2);
}
return 0;
}