描述

在一张2D地图上有N座城市,坐标依次是(X1, Y1), (X2, Y2), ... (XN, YN)。  

现在H国要修建一条平行于X轴的天然气主管道。这条管道非常长,可以认为是一条平行于X轴的直线。  

小Ho想知道如何修建这条管道,可以使N座城市到管道的垂直距离之和最小。请你求出这个最小的距离之和。

输入

第一行包含一个整数N。  

以下N行每行包含两个整数Xi, Yi。  

1 <= N <= 100000  

0 <= Xi, Yi <= 1000000  

输出

一个整数,代表最小的距离之和。

样例输入

4  
0 0  
0 100  
100 0  
100 100

样例输出

200

直接排序在中点位置,对于偶数情况,中间两个点都可以,答案相同,因为要求是整数。也可以考虑每次求一个最大y和最小y之间的差,都加起来,因为管道肯定在他俩之间。
代码:
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <algorithm>

using namespace std;
typedef long long ll;
int a[100000];
int main() {
    int n,x;
    ll sum = 0;
    scanf("%d",&n);
    for(int i = 0;i < n;i ++) {
        scanf("%d%d",&x,&a[i]);
    }
    sort(a,a + n);
    for(int i = 0;i < n;i ++) {
        sum += abs(a[i] - a[n / 2]);
    }
    printf("%lld",sum);
}