104. 货仓选址
题意:
给你n个点,要求你找到一个点,使得这个点到所有点的距离之和最小。
思路:
- 先排序。
- 找到所有点的中位数。
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:
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;
}