BZOJ 3399 [Usaco2009 Mar]Sand Castle城堡

2017.08.21

题目大意

给你两个数组,其中一个数组中的某个元素+1花费X,-1花费Y,求最小花费。


直接Sort两遍,一一比对就可以了。 贪心神题,别问我咋证明QwQ

#include <cstdio>
#include <algorithm>
using namespace std;
int n,x,y,m[25010],b[25010];
long long ans;
int main()
{
    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)
        ans+=m[i]<b[i]?(b[i]-m[i])*x:(m[i]-b[i])*y;
    printf("%lld\n",ans);
    return 0;
}