1 条题解

  • 0
    @ 2026-9-6 20:54:56

    充电站选址

    题意简述

    nn 个村庄在直线上的位置为 a1,,ana_1,\dots,a_n。要建 kk 个充电站(位置任意),使得每个村庄到最近充电站的距离都不超过 DD,求最小的整数 DD

    思路

    二分答案

    “最小化最大覆盖距离”是典型的二分答案模型:判断“是否存在一种放法使每个村庄到最近站的距离 D\le D”。

    显然答案关于 DD 单调:DD 越大越容易满足。于是二分 D[0,109]D \in [0, 10^9]

    贪心判定

    给定 DD,如何判断 kk 个站是否够用?

    按村庄位置从小到大考虑。第一个还没被覆盖的村庄位于 anowa_{now}最优做法是把当前这个站建在 anow+Da_{now} + D

    • 它到村庄 anowa_{now} 的距离正好是 DD,不会浪费;
    • 它能覆盖所有位置 anow+2D\le a_{now} + 2D 的村庄(距离 D\le D 即位置 [anow,anow+2D]\in [a_{now}, a_{now} + 2D])。

    于是每放一个站,就跳过所有位置 anow+2D\le a_{now} + 2D 的村庄,继续处理下一个未覆盖村庄。统计共需要多少个站,若 k\le kDD 可行。

    复杂度:排序 O(nlogn)O(n\log n),二分 O(log109)O(\log 10^9) 轮,每轮 check 线性扫描 O(n)O(n),总复杂度 O(nlogn+nlog109)O(n \log n + n \log 10^9)

    正确性

    • 贪心:第一个未覆盖的村庄 anowa_{now} 必须被某个站覆盖,任何方案中覆盖它的那个站位置 anow+D\le a_{now}+D(否则距离超 DD)。把站右移放到 anow+Da_{now}+D 不会减少覆盖范围,且是“尽量靠右”的最优选择,覆盖的村庄集合是包含关系。因此贪心得到的站数是最少的。
    • 二分:满足单调性,标准二分答案。

    性质档位提示

    • 性质 A(等距):所有村庄位置等差,站数与间距直接相关,可手算答案。
    • 性质 B(k=nk=n):每村一站,答案恒为 00,验证二分下界与“D=0D=0”的特殊情形。
    • 性质 C(k=1k=1):单站覆盖全线段,答案即 (maxamina)/2\lceil (\max a - \min a)/2 \rceil
    • 性质 D(聚簇):每簇只需一个站,答案取决于簇与簇之间的距离。

    实现细节

    • long long 存位置与答案(2D2D 可能达到 2×1092\times 10^9)。
    • 二分上界取 10910^9(一个站即可覆盖整条线段的距离上限)。
    • 1

    信息

    ID
    253
    时间
    2000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    30
    已通过
    13
    上传者