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;
}
posted @ 2022-02-04 14:41  wangzhongyuan  阅读(1)  评论(0编辑  收藏  举报  来源