#include using namespace std; unsigned long long min ( unsigned long long a, unsigned long long b ) { return a >= b ? b : a; } unsigned long long maxim ( unsigned long long a, unsigned long long b ) { return a >= b ? a : b; } unsigned long long calculateMax ( unsigned long long * firstS, unsigned long long * secondS, unsigned long long height ) { unsigned long long max = 0; for ( unsigned long long i = 0; i < height; i++ ) { for ( unsigned long long j = 0; j < height; j++ ) { max += min( firstS[i], secondS[j] ); } } return max; } int main() { unsigned long long cases; cin >> cases; unsigned long long height = 0; for ( unsigned long long i = 0; i < cases; i++ ) { cin >> height; unsigned long long min1 = 0, min2 = 0; unsigned long long *firstSight = new unsigned long long[height]; unsigned long long *secondSight = new unsigned long long[height]; for ( unsigned long long j = 0; j < height; j++ ) { cin >> firstSight[j]; min1 += firstSight[j]; } for ( unsigned long long j = 0; j < height; j++ ) { cin >> secondSight[j]; min2 += secondSight[j]; } unsigned long long max = calculateMax(firstSight, secondSight, height); cout << "Minimalni budova obsahuje " << maxim(min1, min2) << " kostek, maximalni " << max << " kostek." << endl; delete [] firstSight; delete [] secondSight; } return 0; }