【中位数的应用】邮局设置
来源:互联网 发布:淘宝客服月薪一般多少 编辑:程序博客网 时间:2024/05/23 18:27
【问题描述】
一些村庄建在一条笔直的高速公路边上,我们用一条坐标轴来描述这条公路,每个村庄的坐标都是整数,没有两个村庄的坐标相同。两个村庄的距离定义为坐标之差的绝对值。我们需要在某些村庄建立两个邮局。使每个村庄使用与它距离最近的邮局,建立邮局的原则是:所有村庄到各自使用的邮局的距离总和最小。
【输入格式】
第一行:n ,表示有n个村庄。
第二行:a1 a2 a3 .. an 表示n个村庄的坐标。
【输出格式】
第一行:表示最小距离总和。
【输入样例】
101 2 3 6 7 9 11 22 44 50
【输出样例】
43
【数据范围】
1<=n<=10000 1<=a[i]<=1000000000
题目大意:给了你x轴上一些点的坐标,要求你选取其中的两个点使得其他点到这两个点的距离总和最小。
算法:中位数的应用+枚举
乍一看不好求,但是如果题目只需要求一个点,那么显然由中位数原理知这个点是所有点的中位点。然而这个题要求修两个点的情形,该怎么办呢?
这里有一种思路:把全部点按坐标从小到大排序后,分成两个部分,那么这两个部分的中位点建立邮局显然使这两个部分中的所有点都有到邮局的最小值,枚举这两个部分的中间点i,求出两个部分的最小距离并取最小值就是答案。
#include<cstdio>#include<iostream>#include<cstring>#include<queue>#include<algorithm>#include<cmath>#include<cstdlib>using namespace std;typedef long long LL;const int maxn=1000005;const LL inf=10000000000012;int n;int A[maxn];int main(){ //freopen("my.in","r",stdin); //freopen("my.out","w",stdout); scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&A[i]); sort(A+1,A+1+n); int mp1=1,mp2=1; LL sum,ans=inf; for(int i=1;i<=n;i++) { mp1=A[(i+1)/2]; mp2=A[(i+n+1)/2]; sum=0; for(int j=1;j<=i;j++) sum+=abs(A[j]-mp1); for(int j=i+1;j<=n;j++) sum+=abs(A[j]-mp2); ans=min(sum,ans); } cout<<ans<<endl; return 0;}
0 0
- 【中位数的应用】邮局设置
- hlg1398邮局问题【找中位数】
- hlg1398邮局问题【找中位数】
- 【中位数】医院的设置
- 中位数的应用
- 上中位数的应用
- poj1723 中位数的应用
- 算法导论9-2 邮局位置问题的带权中位数解法证明
- 二维邮局选址问题-带权中位数
- POJ 2313 中位数的应用
- 二维带权邮局位置(选址)问题(分别求横坐标、纵坐标的带权中位数)C++实现
- 二维带权邮局位置(选址)问题(分别求横坐标、纵坐标的带权中位数)C++实现
- 中位数应用
- 平面上的邮局
- 平面上的邮局
- 一维带权邮局位置问题(找带权中位数)C++实现
- 中位数的应用—士兵站队问题
- 中位数的中位数
- 10 种机器学习算法的要点(附 Python )
- WordPress工作原理之程序文件执行顺序
- LeetCode 67. Add Binary
- Search a 2D Matrix II
- 使用jquery静态资源公共库cdn及回退地址
- 【中位数的应用】邮局设置
- Oracle 找出需要回收高水位的表
- android图片下载器
- Centos6.X下安装Eclipse
- tomcat get 中文乱码
- [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588
- Java Calendar 类的时间操作
- Ubuntu 手机开发培训准备
- 可重入函数和线程安全的区别与联系