#include #include #include #include #include using namespace std; vector prvni; vector druhe; int width; int getmin(int i, int j) { if (i < j) { return i; } return j; } int main() { prvni.reserve(100); druhe.reserve(100); int testCases; scanf ("%d", &testCases); for (int tc = 0; tc < testCases; tc++) { // Cteni vstupu scanf("%d", &width); for (int i = 0; i < width; i++) { scanf("%d", &prvni[i]); } // Obracene for (int i = 0; i < width; i++) { scanf("%d", &druhe[width - 1 - i]); } // Max int max = 0; for (int i = 0; i < width; i++) for (int j = 0; j < width; j++) { max += getmin(prvni[i], druhe[j]); } // Min std::sort( prvni.begin(), prvni.begin() + width); std::sort( druhe.begin(), druhe.begin() + width); int i = width - 1; int j = width - 1; int min = 0; while (i >= 0 && j >= 0) { if (prvni[i] == druhe[j]) { min += prvni[i]; i--; j--; } else if (prvni[i] > druhe[j]) { min += prvni[i]; i--; } else { min += druhe[j]; j--; } } for (; i >= 0; i--) { min += prvni[i]; } for (; j >= 0; j--) { min += druhe[j]; } printf("Minimalni budova obsahuje %d kostek, maximalni %d kostek.\n", min, max); } }