【9731】货仓选址题解

又到了一周一次的写题解版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]);//注意要有绝对值
	}
1 个赞

%%%大佬
1