本人菜鸟一枚,近日开通博客,上传几道写过的题。不喜勿喷,给各位大佬端茶递水。
题目描述
小明最近做起了物流生意,为了提高送货效率,小明想请你帮他确定一下仓库的最佳位置。
为了简化问题,小明认为所有的客户住所都在一条坐标轴上,并且每个住所都在轴上有一个坐标。小明每天都会将货物从仓库送到各个客户手中。
请问仓库安置在什么位置(位置可以是轴上的任意点,也可以和客户住所位置重合),能使得仓库到各个客户住所的距离之和最小?如果存在多个位置距离相等,则输出位置最大的那一组。
输入
输入的第一行是一个整数T,表示有T组测试数据。
每组测试数据第一行是一个整数N(1<=N<=1000)表示在轴上共有N个客户住所需要送达快递。
接下来N行,每行一个整数ai(0<=ai<=30000)表示每个客户住所的位置,所有客户住所的位置均不相同。
输出
对于每组输入,输出一行,包含两个整数,分别是你确定的仓库位置,以及仓库到所有客户住所的距离之和。
样例输入
2
5
0
20
40
10
30
1
20
样例输出
20 60
20 0
解题思路:
把这n个点从小到大排序,然后找到第n/2+1个点,求出这点到别的点的距离之和。
代码如下:
1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 int main() 6 { 7 int a,b[1010],i,j,k,q,c; 8 scanf("%d",&a); 9 while(a--) 10 { 11 memset(b,0,sizeof(b)); 12 scanf("%d",&c); 13 for(i=0;i<c;i++) 14 scanf("%d",&b[i]); 15 sort(b,b+c); 16 q=0; 17 for(i=0;i<c/2;i++) 18 q+=b[c/2]-b[i]; 19 for(i=c/2+1;i<c;i++) 20 q+=b[i]-b[c/2]; 21 printf("%d %d\n",b[c/2],q); 22 } 23 return 0; 24 }