
我们设仓库位于x处,左边有p个商店,右边有q个商店。
如果当前p>q,仓库左移一个单位长度,距离之和就会减少p-q;
同理若p<q,仓库右移一个单位长度,距离之和就会减少q-p。
故我们最终一定是让p、q相等。
首先按坐标对商店排序,然后将仓库放在(n+1)/2上即可。
代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int a[N];
int n;
int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
sort(a+1,a+1+n);
int ans=0;
for(int i=1;i<=n/2;i++)ans+=a[n-i+1]-a[i];
cout<<ans;
return 0;
}
这篇博客探讨了如何通过优化仓库位置来最小化商店与仓库之间的距离之和。文章首先介绍了问题背景,当仓库位于x处,左边有p个商店,右边有q个商店时,通过调整仓库位置使得p等于q可以达到最优。接着,博客详细解释了按坐标排序商店并把仓库置于中点的策略,以此减少总距离。最后,给出了C++代码实现这一算法,计算并输出距离之和。
1276

被折叠的 条评论
为什么被折叠?



