CH - 0501 货仓选址(中位数)
生活随笔
收集整理的这篇文章主要介绍了
CH - 0501 货仓选址(中位数)
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
题目链接:点击查看
题目大意:在一条数轴上有N家商店,它们的坐标分别为 A[1]~A[N]。现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。
题目分析:中位数应用最经典的问题之一了,我们设应该将货仓建立在坐标X处,现在X左边有P家商店,X右边有Q家商店,我们需要尽可能的让P=Q才是最优解
这样问题就转换成了求整个序列的中位数了
然后说一下蓝书上给出的结论吧(对于序列a已经排好序):
这样一来,为了方便书写,我们不妨设a[(n+1)/2]作为中位数,就能都满足奇偶的两个条件了,也不用分类讨论了
代码:
#include<iostream> #include<cstdlib> #include<string> #include<cstring> #include<cstdio> #include<algorithm> #include<climits> #include<cmath> #include<cctype> #include<stack> #include<queue> #include<list> #include<vector> #include<set> #include<map> #include<sstream> using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e5+100;int a[N];int main() { // freopen("input.txt","r",stdin); // ios::sync_with_stdio(false);int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",a+i);sort(a+1,a+1+n);int temp=a[(n+1)/2];LL ans=0;for(int i=1;i<=n;i++)ans+=llabs(temp-a[i]);cout<<ans<<endl;return 0; }
总结
以上是生活随笔为你收集整理的CH - 0501 货仓选址(中位数)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: CH - 0502 七夕祭(思维+中位数
- 下一篇: POJ - 3784 Running M