【蓝桥杯每日一练:货仓选址】

问题描述

在一条数轴上有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)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zjf时空方程

感谢各位的支持,我一定会努力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值