#include #include #include #include using namespace std; int myMin (int a, int b) { return a > b ? b : a; } bool greater(int a, int b) { return a > b; } int main(){ int n, k; scanf ("%d", &n); while (n--) { scanf ("%d", &k); int * pole1 = (int*)malloc(sizeof (int) * k), * pole2 = (int*)malloc(sizeof (int) * k); for (int i = 0; i < k; i++) { scanf ("%d", &(pole1[i])); } for (int i = 0; i < k; i++) { scanf ("%d", &(pole2[i])); } unsigned long long int max = 0, min = 0; for (int i = 0; i < k; i++) { if (pole1[i] == 0) continue; for (int j = 0; j < k; j++) { max += myMin(pole1[i], pole2[j]); } } //qsort(pole1, sizeof(int), k, myComp); /*sort(pole1, pole1 + k, greater); sort(pole2, pole2 + k, greater); int pole2i = 0; int i = 0; while(i < k && pole2i < k) { if (pole1[i] >= pole2[pole2i]) { //min += pole2[pole2i]; i++; } else if(pole1[i] <= pole2[pole2i]) { pole2i++; } if(pole1[i] == pole2[pole2i]) { min += pole1[i]; } }*/ for(int i = 0; i < k; ++i) { for(int j = 0; j < k; ++j) { if(pole1[i] == pole2[j]) { min += pole1[i]; pole1[i] = pole2[j] = 0; } } } for(int i =0; i < k; ++i) { min += pole1[i]; } for(int j = 0; j < k; ++j) { min += pole2[j]; } printf("Minimalni budova obsahuje %llu kostek, maximalni %llu kostek.\n", min, max); } return 0; }