Vijos p1691 输油管道问题


描述
某石油公司计划建造一条由东向西的主输油管道。该管道要穿过一个有n 口油井的油田。从每口油井都要有一条输油管道沿最短路经(或南或北)与主管道相连。如果给定n口油井的位置,即它们的x 坐标(东西向)和y 坐标(南北向),应如何确定主管道的最优位置,即使各油井到主管道之间的输油管道长度总和最小的位置?

编程任务:
给定n 口油井的位置,编程计算各油井到主管道之间的输油管道最小长度总和.

格式
输入格式
输入第1行是油井数n,1≤n≤10000。
接下来n行是油井的位置,每行2个整数x和y,-10000≤x,y≤10000。

输出格式
输出第1行中的数是油井到主管道之间的输油管道最小长度总和。

样例1
样例输入1
5
1 2
2 2
1 3
3 -2
3 3

样例输出1
6

限制
各个测试点1s

代码

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 void bsort(int *, int);
 5 void swap(int *,int *);
 6 
 7 int main() {
 8     int n,i,tmp,a[10010],mid,sum;
 9     sum=0;
10     scanf ("%d",&n);
11     mid=n/2;
12     for (i=0;i<n;i++) {
13         scanf ("%d%d",&tmp,a+i);
14     }
15     bsort (a,n);
16     for (i=0;i<n;i++) {
17         sum += abs(a[i]-a[mid]);    
18     }
19     printf ("%d\n",sum);
20     system("pause");
21     return 0;
22 }
23 
24 void bsort(int *a, int len) {
25     int i,j;
26     for (i=0;i<len-1;i++) {
27         for (j=i+1;j<len;j++) {
28             if (a[i]>a[j]) {
29                 swap (&a[i],&a[j]);
30             }    
31         }    
32     }
33 }
34 
35 void swap(int *a, int *b) {
36     int tmp = *a;
37     *a = *b;
38     *b = tmp;    
39 }

 

posted @ 2018-02-28 21:19  yachen2018  阅读(112)  评论(0编辑  收藏  举报