CF1631A
显然,每个 $i$ 最多交换一次,
且 $\max (max (a_1,a_2,\cdots,a_n),max (b_1,b_2,\cdots,b_n))$ 是不变的,
有对称性,不妨设两数中的最大值为 $b_i$ 中的最大值,
所以我们就让 $a_i$ 中的最大值越小越好,也就是让每个数尽量小,
那么,我们将 $a_i$ 与 $b_i$ 较大的换到 $b_i$,较小的换到 $a_i$,
最后求一遍积就是正解了。
#include <cstdio>
#include <iostream>
using namespace std;
const int maxn = 110;
int a[maxn], b[maxn];
int main() {
int T; scanf ("%d", &T);
while (T --) {
int n; scanf ("%d", &n);
for (int i = 1; i <= n; ++i) scanf ("%d", &a[i]);
for (int i = 1; i <= n; ++i) scanf ("%d", &b[i]);
for (int i = 1; i <= n; ++i) {
int mx = max (a[i], b[i]), mn = min (a[i], b[i]);
a[i] = mn; b[i] = mx; // 较大的放到 a[i],较小的放到 b[i]
}
int m1, m2; m1 = m2 = 0;
for (int i = 1; i <= n; ++i) {
m1 = max (m1, a[i]); m2 = max (m2, b[i]);
}
printf ("%lld\n", 1ll * m1 * m2); // 以防万一,开个 long long
}
return 0;
}