#include #include #include #include #include #include int main(){ int N; std::scanf("%d", &N); for (int n = 0; n < N; ++n){ int size; std::scanf("%d", &size); std::vector front(size), side(size); for (int i = 0; i < size; ++i){ std::scanf("%d", &front[i]); } for (int i = 0; i < size; ++i){ std::scanf("%d", &side[i]); } std::sort(front.begin(), front.end(), std::greater()); std::sort(side.begin(), side.end(), std::greater()); int f_index = 0, s_index = 0; int minimum = 0; while (f_index != size && s_index != size){ if (front[f_index] == side[s_index]){ minimum += front[f_index]; f_index++; s_index++; } else if (front[f_index] > side[s_index]) { minimum += front[f_index]; f_index++; } else if (front[f_index] < side[s_index]){ minimum += side[s_index]; s_index++; } } while (f_index != size){ minimum += front[f_index++]; } while (s_index != size){ minimum += side[s_index++]; } int maximum = 0; for (int i = 0; i < size; ++i){ for (int j = 0; j < size; ++j){ maximum += std::min(front[i], side[j]); } } std::printf("Minimalni budova obsahuje %d kostek, maximalni %d kostek.\n", minimum, maximum); } return 0; }