这题一眼排序不等式,第个位置会贡献
次(乘法原理),于是写了个排
之后再逆序排
,两个乘起来再乘以贡献的次数,结果
。
然后就发现哪里不对了,事实上位置是固定的,所以排序不等式中的
应该是
,这里需要特别注意的是,因为排序不等式中是要最大的配上最小的,所以在算排序不等式中的
是不能取模的!!!(取模后最大的就不一定是最大的了,会
),
然后我们就愉快的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;
} 


京公网安备 11010502036488号