洛谷题目链接
Codeforces题目链接
分析
如果只算区间 1 1 1 到 n n n 的话那么将 a a a 升序 b b b 降序排序即可。
我们发现 a i a_i ai 一共要乘 i × ( n − i + 1 ) i\times(n-i+1) i×(n−i+1) 次,所以可以直接将 a i a_i ai 乘 i × ( n − i + 1 ) i\times(n-i+1) i×(n−i+1),在按上述贪心方法计算即可,注意取模。
代码
#include <bits/stdc++.h>
#define int long longusing namespace std;const int N = 2 * 1e5 + 5, mod = 998244353;
int n, a[N], b[N];signed main(){cin >> n;for(int i = 1; i <= n; i ++){cin >> a[i];a[i] *= i * (n - i + 1);}for(int i = 1; i <= n; i ++){cin >> b[i];}sort(a + 1, a + n + 1);sort(b + 1, b + n + 1, greater <int>());int ans = 0;for(int i = 1; i <= n; i ++){ans = (ans + a[i] % mod * b[i] % mod) % mod;}cout << ans;return 0;
}