题目描述
在一条数轴上有 N 家商店,他们的坐标分别为 A[1]−A[N]。现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小,输出最短距离之和。
输入
第一行输入一个数 N。(1≤N≤100000)
接下来一行,输入 N 个数,表示商店的坐标。
输出
输出最短距离之和。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void swap(int *a,int *b){
if(a==b) return ;
*a=*a^*b;
*b=*a^*b;
*a=*a^*b;
return ;
}
void q_sort(int *arr,int head,int tail){
if(head>=tail) return;
int first=head+1,last=tail;
while(1){
while(first<=tail&&arr[first]<arr[head]){
first+=1;
continue;
}
while(arr[last]>arr[head]){
last-=1;
continue;
}
if(first<last) swap(&arr[last],&arr[first]);
else break;
}
first-=1;
swap(&arr[head],&arr[first]);
q_sort(arr,head,first-1);
q_sort(arr,first+1,tail);
return ;
}
int main(void){
int n=0;
scanf("%d",&n);
int *arr=(int *)malloc(sizeof(int)*n);
for(int i=0;i<n;i++){
scanf("%d",&arr[i]);
}
q_sort(arr,0,n-1);
int temp=arr[n/2];
int res=0;
for(int i=0;i<n;i++){
res+=abs(temp-arr[i]);
}
printf("%d",res);
return 0;
}
由于排序算法过于低效,数据量过大会超出时限,在1000个左右数据时可以正常运行。