#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long int ll; typedef unsigned long long int ull; #define PB push_back #define MP make_pair #define FOR(prom, a, b) for(int prom = (a); prom < (b); prom++) #define FORD(prom, a, b) for(int prom = (a); prom > (b); prom--) #define FORDE(prom, a, b) for(int prom = (a); prom >= (b); prom--) #define MM(co, cim) memset((co), (cim), sizeof((co))) #define DEB(x) cerr << ">>> " << #x << " : " << x << endl; //int pole[100][100]; int dole[100]; int vpravo[100]; int main ( void ) { int zadani; cin >> zadani; for(int i = 0; i < zadani; i++) { int size; cin >> size; multiset doleSet; multiset vpravoSet; for(int j = 0; j < size; j++){ cin >> dole[j]; doleSet.insert(dole[j]); } for(int j = 0; j < size; j++) { cin >> vpravo[j]; vpravoSet.insert(vpravo[j]); } int sum = 0; for(int j = 0; j < size; j++) { for(int k = 0; k < size; k++) { sum += dole[j] < vpravo[k] ? dole[j] : vpravo[k]; } } /* cout << "---------------------" << endl; for(int j = 0; j < size; j++) { cout << dole[j] << " "; } cout << "---------------------" << endl; for(int j = 0; j < size; j++) { cout << vpravo[j] << " "; } cout << "---------------------" << endl; */ int min = 0; multiset::reverse_iterator itDole = doleSet.rbegin(); multiset::reverse_iterator itVpravo = vpravoSet.rbegin(); while (itDole != doleSet.rend() || itVpravo != vpravoSet.rend()) { if (itDole == doleSet.rend()) { min += *itVpravo; ++itVpravo; continue; } if (itVpravo == vpravoSet.rend()) { min += *itDole; ++itDole; continue; } if (*itDole == *itVpravo) { min += *itDole; ++itVpravo; ++itDole; } else if (*itDole < *itVpravo) { min += *itVpravo; ++itVpravo; } else if (*itDole > *itVpravo) { min += *itDole; ++itDole; } /* min += (*itDole > *itVpravo ? *itDole : *itVpravo); cout << "itVpravo: " << *itVpravo << endl; cout << "itDole: " << *itDole << endl; cout << "tohle pridavame " << (*itDole > *itVpravo ? *itDole : *itVpravo) << endl << endl; */ } cout << "Minimalni budova obsahuje " << min << " kostek, maximalni " << sum << " kostek." << endl; } return 0; }