欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ICPC NEAU Programming Contest 2020 H 排序

程序员文章站 2022-05-12 11:45:39
...

ICPC NEAU Programming Contest 2020 H 排序

思路:
是道原题。可以直接拆出来变成 a[i]b[i]i(ni+1)a[i]*b[i]*i*(n-i+1)
b[i]i(ni+1)b[i]*i*(n-i+1)是固定的,所以再结合a[i]a[i]乘起来即可。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>

using namespace std;

typedef long long ll;
const int maxn = 4e5 + 7;
const int mod = 1e9 + 7;
ll a[maxn],b[maxn];

int cmp(ll x,ll y) {
    return x > y;
}

int main() {
    int T;scanf("%d",&T);
    while(T--) {
        ll n;scanf("%lld",&n);
        for(int i = 1;i <= n;i++) {
            scanf("%lld",&a[i]);
        }
        for(int i = 1;i <= n;i++) {
            scanf("%lld",&b[i]);
        }
        ll ans = 0;
        for(ll i = 1;i <= n;i++) {
            b[i] = b[i] * i * (n - i + 1);
        }
        sort(a + 1,a + 1 + n,cmp);
        sort(b + 1,b + 1 + n);
        for(int i = 1;i <= n;i++) {
            ans = (ans + b[i] % mod * a[i] % mod) %mod;
            ans %= mod;
        }
        printf("%lld\n",ans);
    }
    return 0;
}