寒假每日一题 104. 货仓选址(中位数 + 抽风大佬的思路orz)

104. 货仓选址

题意:

给你n个点,要求你找到一个点,使得这个点到所有点的距离之和最小。

思路:

  1. 先排序。
  2. 找到所有点的中位数。

AC

# include <bits/stdc++.h>

using namespace std;

const int N = 1E5+10;

int a[N];

typedef long long ll;

int main(){
    
    
    ios::sync_with_stdio(0);
    int n;
    cin>>n;
    for(int i = 1; i <= n; i ++ )cin>>a[i];
    sort(a+1,a+1+n);
    ll mid = a[(n+1)/2];
    ll ans = 0;
    for(int i = 1; i <= n; i ++ ) ans += abs(a[i]-mid);
    cout<<ans<<endl;
    return 0;
}

思路2:

抽风大佬orz

AC2

# include <bits/stdc++.h>

using namespace std;

long long ans = 0;

const int N = 1e5+10;

int a[N];

int main(){
    
    
    int n;
    cin>>n;
    for(int i = 0; i < n; i ++ ) cin>>a[i];
    sort(a,a+n);
    for(int i = 0; i < n; i ++) ans += a[i]-a[i>>1];
    cout<<ans<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_45377553/article/details/112389878