又到了一周一次的写题解版TaoJ了好吧
题目描述
在一条数轴上有 N 家商店,他们的坐标分别为 A[1]~A[N]。现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小,输出最短距离之和。
【输入描述】
第一行输入一个数 N。(1≤N≤100000)
接下来一行,输入 N 个数,表示商店的坐标。
【输出描述】
输出最短距离之和。
【样例输入】
5 1 3 5 6 10
【样例输出】
12
约定:本题的结果不会超过int范围
解题思路:
考虑贪心的思路。那么首先货仓肯定要建在其中一个商店的坐标上,让其中一个的距离和为0,那么只需要先将数据排序,再取中位数(不是平均数)就可以确保到每一个的距离最小了。
核心代码:
sort(a+1,a+1+n);
int tmp;
if(n%2!=0)tmp=ceil((n+1)/2);
else tmp=n/2;
int ret=0;
for(int i=1;i<=n;i++){
ret+=abs(a[tmp]-a[i]);//注意要有绝对值
}