这题一眼排序不等式,第个位置会贡献
次(乘法原理),于是写了个排
之后再逆序排
,两个乘起来再乘以贡献的次数,结果
。
然后就发现哪里不对了,事实上位置是固定的,所以排序不等式中的
应该是
,这里需要特别注意的是,因为排序不等式中是要最大的配上最小的,所以在算排序不等式中的
是不能取模的!!!(取模后最大的就不一定是最大的了,会
),
然后我们就愉快的A了这道E题,不得不说这道题还是挺适合萌新练思维的QWQ
#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll maxn=500010; const ll INF=2147483647; const ll mod=998244353; ll n,a[maxn],b[maxn],sum; int main() { cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; a[i]=a[i]*i*(n-i+1); } sort(a+1,a+n+1); for(int i=1;i<=n;i++)cin>>b[i]; sort(b+1,b+n+1); reverse(b+1,b+n+1); for(int i=1;i<=n;i++) { a[i]%=mod; sum+=a[i]*b[i]; sum%=mod; } cout<<sum; return 0; }