解题思路
把原序列和目标序列排个序,求对应每项相差的和。
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cstring>
#include<cmath>
#include<map>
#include<queue>
#define ll long long
using namespace std;
int n,x,y,m[30010],b[30010];
ll ans;
int main(){
freopen("sandcas.in","r",stdin);
freopen("sandcas.out","w",stdout);
scanf("%d%d%d",&n,&x,&y);
for(int i=1;i<=n;i++)
scanf("%d%d",&m[i],&b[i]);
sort(m+1,m+n+1);
sort(b+1,b+n+1);
for(int i=1;i<=n;i++)
{
if(m[i]>b[i])
ans+=(m[i]-b[i])*y;
else ans+=(b[i]-m[i])*x;
}
printf("%lld",ans);
}