思路
- 贪心思路:
- 仓库到左边距离和为x,到右边距离和为y,答案为y+x
- 要y+x小,即y小,x小,越靠近中间越好,最佳选择点就在中间
- 数学:
- 绝对值不等式
- 最小值在中间部分取得,对于奇数个点,最小值在最中间的点;
- 对于偶数个点,最小值在中间那一段
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
const int N=1e5+10;
int n;
int arr[N];
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
int x;
scanf("%d",&x);
arr[i]=x;
}
sort(arr,arr+n);
LL res=0;
for(int i=0;i<n;i++){
if(i<n/2) res-=arr[i];
else res+=arr[i];
if(n%2 && i==n/2) res-=arr[i];
}
printf("%lld\n",res);
return 0;
}