1 条题解

  • 0
    @ 2025-8-24 22:58:04

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar GXZJQ
    AFO||十年竞赛一场空 不开 long long 见祖宗

    搬运于2025-08-24 22:58:04,当前版本为作者最后更新于2024-05-16 20:22:21,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    P10452 货仓选址 题解

    题目链接

    题目大意

    在数轴上找一个点,使得这个点到其他所有点的距离之和最小。

    题目分析

    这是一道找规律的题目。

    先来看样例,对于样例来说,地图如下图所示:

    示意图一

    这时,观察可以发现,在 262 \sim 6 之间建一个仓库可以让总和距离最小。那么,这是为什么呢?

    因为这时我们可以发现,这个点都在每组线段上,这样的话,我们选的点到这两个点之间的和就是以这两个点为端点的线段的长度。在高中,我们将其称之为绝对值三角不等式

    推广一下,为了使距离和最小,就是要让这个点在每两个点构成的线段上,此时满足这个点到这两个点的距离和最小。由于数轴上的点是有次序的,所以长度最大的线段一定包含长度最小的线段,所以最后我们只需要在长度最小的线段上任取一点即可满足贪心。特别地,当点数为奇数时,在中间点建一个仓库即可满足题目要求。

    注意开始循环前需要排序。

    参考代码

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn = 1e5 + 10;
    int n, ans, a[maxn];
    int main() {
    	cin >> n;
    	for (int i = 1; i <= n; i++) cin >> a[i];
    	sort(a + 1, a + n + 1);
    	for (int i = 1; i <= n / 2; i++)
    		ans += (a[n - i + 1] - a[i]);
    	cout << ans;
    	return 0;
    }
    
    
    • 1

    信息

    ID
    10202
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者