排序2 货舱选址

这篇博客探讨了如何通过优化仓库位置来最小化商店与仓库之间的距离之和。文章首先介绍了问题背景,当仓库位于x处,左边有p个商店,右边有q个商店时,通过调整仓库位置使得p等于q可以达到最优。接着,博客详细解释了按坐标排序商店并把仓库置于中点的策略,以此减少总距离。最后,给出了C++代码实现这一算法,计算并输出距离之和。
摘要由CSDN通过智能技术生成

在这里插入图片描述
我们设仓库位于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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值