#include #include int min_n(int a, int b){ return (a>b)?b:a; } int max_n(int a, int b){ return (a>b)?a:b; } int count_r[100000]; int count_d[100000]; int main(){ int t_c, i, max, k, j, min; int *right, *down; for (i=0; i < 100000; i++){ count_r[i] = count_d[i] = 0; } scanf("%d", &t_c); while(t_c!= 0){ max = 0; min=0; scanf("%d", &k); right = malloc(sizeof(int)*k); down = malloc(sizeof(int)*k); for (i=0; i < k; i++){ scanf("%d", &right[i]); count_r[right[i]]++; } for (i=0; i < k; i++){ scanf("%d", &down[i]); count_d[down[i]]++; } for (i=0; i < k;i++){ for (j = 0; j < k; j++){ max+=min_n(right[i], down[j]); } } for (i = 0; i < 100000; i++){ min += i*max_n(count_d[i], count_r[i]); count_d[i] = count_r[i] = 0; } printf("Minimalni budova obsahuje %d kostek, maximalni %d kostek.\n", min, max); free(right); free(down); t_c--; } return 0; }