描述
在一张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); }