#include #include #include #include using namespace std; #define FOR(i,n) for(int i = 0; i < n; i++) int main(void){ int n; int oneSide[100]; int secondSide[100]; int problem[100]; int k1[100][100]; int k2[100][100]; int index_k1[100]; int index_k2[100]; scanf(" %d", &n); FOR(isatac,n){ int k; scanf(" %d", &k); FOR(i, k){ scanf(" %d", &oneSide[i]); } FOR(i, k){ scanf(" %d", &secondSide[i]); } int max = 0; FOR(i, k){ FOR(j,k){ max += min(oneSide[i], secondSide[j]); } } int min = 0; FOR(i ,k){ int index = 0; FOR(j,k){ if(oneSide[i] <= secondSide[j]){ k1[i][index++] = j; } } index_k1[i] = index; } FOR(i ,k){ int index = 0; FOR(j,k){ if(oneSide[j] >= secondSide[i]){ k2[i][index++] = j; } } index_k2[i] = index; } FOR(i,k){ FOR(j, index_k1[i]){ int index = k1[i][j]; if(oneSide[i] == secondSide[index] && index_k2[index]){ index_k2[index] = 0; break; } } min += oneSide[i]; } FOR(i,k){ FOR(j, index_k2[i]){ int index = k2[i][j]; if(oneSide[i] == secondSide[index] && index_k1[index]){ index_k1[index] = 0; break; } } if(index_k2[i]) min += secondSide[i]; } printf("Minimalni budova obsahuje %d kostek, maximalni %d kostek.\n", min, max); } return 0; }