https://www.vijos.org/p/1691
中文题意。
容易知道 距离和x无关,因为是从东到西的。暴力跑一遍也能过。1e8。。
或者 求一下中位数。
容易证明 中位数的时候,距离和最小。
设定 红色为中位数。(则x==y,为中位数左边和右边的数字数目)当选择中位数左边的数字时,有y+1 个的距离增加了a,x-1个减少了a 总距离变大。右边亦然。所以
#include <bits/stdc++.h>
using namespace std;
/*
*/
const int maxn=200006;
typedef long long ll;
int a;
ll b[maxn];
int main()
{ int t;
scanf("%d",&t);
ll sum=0;
for(int i=1;i<=t;i++){
scanf("%d%lld",&a,&b[i]);
}
ll aim;
sort(b+1,b+t+1);
if(t%2==1)
aim=b[t/2+1];
else
aim=(b[t/2]+b[t/2+1])/2;
for(int i=1;i<=t;i++){
sum+=abs(aim-(b[i]));
}
printf("%lld\n",sum);
return 0;
}