ACDream 1735 输油管道
输油管道
Time Limit: 2000/1000MS (Java/Others) Memory Limit: 262144/131072KB (Java/Others)
Problem Description
平面上有n个油井,现在要建立一条主干线,用来把所有的油井产出的原油都输送出去,主干线是平行于x轴的一条直线,每个油井通过一条支线把原油输送到主干线上,现在给定n个油井在平面上的坐标,那么应该把主干线建在什么地方才能让所有的支干线的总长度最小呢?
Input
首先一个正整数n,接下来n行每行两个整数,代表n个油井在平面上的位置。n和坐标都是小于等于1000000的正整数。
Output
输出总的支干线长度的最小值,每个结果占一行。
Sample Input
2 0 0 10 10
Sample Output
10
Manager
题意:给出点的坐标,求最小的输油管的长度。
分析:可以转化成x坐标上的一些固定的点,求一个点到这些点的距离最小。可以证明这个点的坐标的是这些点的中位数。
#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #include<stdlib.h> #include<vector> #include<queue> #include<stack> #include<algorithm> #define LL long long using namespace std; const int MAXN=1000000+5; int a[MAXN]; int main() { int n,temp,x; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d %d",&temp,&a[i]); sort(a,a+n); if(n%2) x=a[n/2]; else x=(a[n/2]+a[n/2-1])/2; LL ans=0; for(int i=0;i<n;i++) ans+=(LL)abs(x-a[i]); printf("%lld\n",ans); return 0; }