题意:给定序列A,B。可以对B重排,使得 最小/
思路:可以求出每个a[i]的计算的次数然后加在a[i]上,然后排序计算。a[i]的计算次数是i*(n-i+1)次。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 2e5 + 10;
const int mod = 998244353;
ll n, a[N], b[N], ans;
int cmp(ll a, ll b) {
return a > b;
}
int main() {
cin >> n;
for(int i = 1; i <= n; i++)
cin >> a[i], a[i] = a[i] * i * (n - i + 1);
for(int i = 1; i <= n; i++)
cin >> b[i];
sort(b + 1, b + n + 1, cmp);
sort(a + 1, a + n + 1);
for(int i = 1; i <= n; i++) {
ans = (ans + a[i] % mod * b[i] % mod) % mod;
}
cout << ans;
return 0;
}