问题描述
在一条数轴上有N家商店,它们的坐标分别为A1~AN。
现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。
为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。
输入格式
第一行输入整数N
第二行N个整数A1~AN
1≤N≤100000
1≤Ai≤100000
输出格式
输出一个整数,表示距离之和的最小值。
【提示】
The key is 中位数到所有点的距离之和最小,可以大幅度减少计算量,具体证明过程。
输入样例
4
6 2 9 1
输出样例
12
代码
N=int(input())
M=list(map(int,input().split()))#把要排序的数放入列表中
M.sort()#默认升序排列
D=0
for i in M:
D=D+abs(i)
if N%2==1:
x=M[int((N+1)/2)]
for i in M:
A=A+abs(x-i)
if A<=D:
D=A
else:
D=D
print(D)
elif N%2==0:
b=M[int(N/2)]
c=M[int(N/2+1)]
for x in range(b,c+1):
A = 0
for i in M:
A=A+abs(x-i)
if A<=D:
D=A
else:
D=D
print(D)