题解:AcWing 104 货仓选址

【题目来源】

AcWing:104. 货仓选址 - AcWing题库

【题目描述】

在一条数轴上有 \(N\) 家商店,它们的坐标分别为 \(A_1\sim A_N\)

现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。

为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。

【输入】

第一行输入整数 \(N\)

第二行 \(N\) 个整数 \(A_1\sim A_N\)

【输出】

输出一个整数,表示距离之和的最小值。

【输入样例】

4
6 2 9 1

【输出样例】

12

【算法标签】

《AcWing 104 货仓选址》 #排序# #快速选择算法# #贪心# #绝对值不等式#

【代码详解】

#include <bits/stdc++.h>
using namespace std;

const int N = 100005;  // 定义数组的最大长度

int n;       // 数组的长度
int a[N];    // 存储数组元素

int main()
{
    // 输入数组的长度
    cin >> n;

    // 输入数组的元素
    for (int i = 0; i < n; i++) cin >> a[i];

    // 将数组元素按升序排序
    sort(a, a + n);

    int res = 0;  // 用于存储最终的结果(最小总代价)

    // 计算所有元素与中位数的绝对差之和
    for (int i = 0; i < n; i++) {
        // 中位数是 a[n / 2],计算当前元素与中位数的绝对差
        res += abs(a[i] - a[n / 2]);
    }

    // 输出最小总代价
    cout << res << endl;

    return 0;
}

【运行结果】

4
6 2 9 1
12
posted @ 2026-02-27 09:22  团爸讲算法  阅读(2)  评论(0)    收藏  举报