题目背景
听说最近石油危机
所以想到了这题
题目描述
某石油公司计划建造一条由东向西的主要输油管道。该管道要穿过一个有n口油井的油田。从每口油井都要有一条输油管道沿最短路径(或南或北)与主管道相连。如果给定n口油井的位置,及它们的x坐标(东西向)和y坐标(南北向),应如何确定主管道的最优位置,即使各油井到主管道之间的输油管道长度总和最小的位置?证明可规定时间内确定主管道的最优位置。
输入输出格式
输入格式:第一行是油井数n(1<=n<=10000)
接下来n行是油井的位置,每行2个整数x和y(-10000<=x,y<=10000)
输出格式:只有一行
是油井到主管道之间的输油管道最小长度总和
输入输出样例
输入样例#1:
5 1 2 2 2 1 3 3 -2 3 3
输出样例#1:
6
这条输油管道肯定是在中间的一个位置比较好,我们就让它在中间好了。
如果n为奇数,说明建在中间的那一条管道一定是所要求的,让它是就好了,n为偶数的话,在中间的两条管道之间的任意一个位置都行,让它在两条之间
我们把n个点排序,求出中位数即可
1 #include<cstdio> 2 #include<algorithm> 3 #include<cmath> 4 #include<cstdlib> 5 using namespace std; 6 int x[10100],y[10100],n,m,ans; 7 8 int main() 9 { 10 scanf("%d",&n); 11 for (int i=1; i<=n; ++i) 12 { 13 scanf("%d%d",&x[i],&y[i]); 14 } 15 sort(y+1,y+n+1); 16 if (n%2==0) m = (y[n/2]+y[n/2+1])/2; 17 else m = y[n/2+1]; 18 for (int i=1; i<=n; ++i) 19 ans += abs(m-y[i]); 20 printf("%d",ans); 21 return 0; 22 }