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