zoukankan      html  css  js  c++  java
  • 快递中转点

    参考blog:https://blog.csdn.net/cjj122/article/details/75579390
     
    在笔直的余姚大街上,分布着密密麻麻的店铺,每天有成千上万笔快递订单。小明想开个快递中转站,那每天一定
    能赚不少钱。每笔订单必须当天送达指定店铺。为了简化问题,小明认为所有店铺都在一条坐标轴上,并且每个店
    铺都在轴上有一个坐标,每天他都会把所有快递放在一个中转点上,然后一件一件开始派送。可是小明是个懒人,
    他想尽可能少走路。他的快递中转站开在什么位置(位置可以是轴上任意点,也可以和店铺位置重合),能使得中转
    站到所有店铺的距离之和的最小。那么就请你和小明一起解决一下这个小问题吧,找到这个最小值。

    Input

    第一行一个整数N(1<=N<=1000)表示在轴上共有N个店铺需要送达快递。
    接下来N行,每行一个整数ai(0<=ai<=1,000,000)表示每个店铺的位置。

    Output

    包含一个整数,中转站到所有店铺的距离之和的最小值。

    Sample Input

    5
    0
    20
    40
    10
    30
    

    Sample Output

    60
    //快递中转站建立在20的位置,则到5个点的距离分别是0,20,40,10,30

    sol:先将店铺的位置按坐标轴从小到大排序,得0,10,20,30,40,调整法:假设快递中转站设在第一个点与第二个点比较,设在第一个点,第一个点不走,后面四个点都要多走10;设在第二个点,第一个点多走10,后面三个点少走10,显然比前面优。但多走的点还是比少走的少,所以再向右调整,选第三个点。与选第二个点比较,左边两个点多走10,右边两个点少走10。这就是中位数原理,假设n为奇数,选在n/2+1的位置,如果是偶数,选在n/2和n/2+1的位置都一样。本题跟各个点之间的距离没有关系,只跟有多少个点相关。
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int main()
     4 {
     5     long long n,f[1101],c,ans=0;
     6     cin>>n;
     7     for(int i=1;i<=n;i++)
     8         cin>>f[i];
     9     sort(f+1,f+1+n);
    10     c=f[(n+1)/2];
    11     for(int i=1;i<=n;i++)
    12              ans=ans+abs(f[i]-c);
    13      
    14     cout<<ans;
    15     return 0;
    16 }


  • 相关阅读:
    神经网络之 --- 2012_ Alexnet
    Array.obj : error LNK2001: unresolved external symbol "void __cdecl Test_ultiply(void)" (?Test_ultiply@@YAXXZ)
    学习opencv出现配置错误(一)
    port和interface的区别
    Vivado当中的ooc与global模式
    ADC采样率,符号率
    MATLAB&Simulink的重复方式
    傅里叶变换的对称性质
    AXI总结一
    晶振相关(一)
  • 原文地址:https://www.cnblogs.com/cutepota/p/12125421.html
Copyright © 2011-2022 走看看