【中位数的应用】邮局设置

本文介绍了一种利用中位数原理解决在高速公路边上的村庄设立邮局的问题,目标是使得所有村庄到邮局的距离总和最小。通过将村庄坐标排序并分两部分,选择两部分的中位点作为邮局位置,可以实现这一目标。通过枚举分界点,找到使距离总和最小的两个邮局位置。
摘要由CSDN通过智能技术生成

【问题描述】

  一些村庄建在一条笔直的高速公路边上,我们用一条坐标轴来描述这条公路,每个村庄的坐标都是整数,没有两个村庄的坐标相同。两个村庄的距离定义为坐标之差的绝对值。我们需要在某些村庄建立两个邮局。使每个村庄使用与它距离最近的邮局,建立邮局的原则是:所有村庄到各自使用的邮局的距离总和最小。

【输入格式】

  第一行:n ,表示有n个村庄。
  第二行:a1 a2 a3 .. an 表示n个村庄的坐标。

【输出格式】

  第一行:表示最小距离总和。

【输入样例】

10
1 2 3 6 7 9 11 22 44 50

【输出样例】

43

【数据范围】

1<=n<=10000  
1<=a[i]<=1000000000

题目大意:给了你x轴上一些点的坐标,要求你选取其中的两个点使得其他点到这两个点的距离总和最小。
算法:中位数的应用+枚举
乍一看不好求,但是如果题目只需要求一个点,那么显然由中位数原理知这个点是所有点的中位点。然而这个题要求修两个点的情形,该怎么办呢?
这里有一种思路:把全部点按坐标从小到大排序后,分成两个部分,那么这两个部分的中位点建立邮局显然使这两个部分中的所有点都有到邮局的最小值,枚举这两个部分的中间点i,求出两个部分的最小距离并取最小值就是答案。
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值