对于长度为 n 的城市数组 cities,每座城市初始拥有若干 CDN 机房。每个机房的服务半径为 r,相当于它能为相距不超过 r 的城市提供服务。给定还可以新建 k 个机房,允许在同一城市重复建设,目标是使所有城市的最小“服务质量”(即能访问到的机房总数)最大化。
我们可以抽象为:让每个城市 i “窗口”内([i–r, i+r])的机房总和至少达到 m,问是否能用不超过 k 次增量操作做到这一点。增量操作:在某个城市 j 新增一台机房,会使得所有覆盖到 j 的城市窗口内总和加 1。
cur_add(通过差分数组模拟区间加法)。若某城市窗口和 initial[i] + cur_add 小于 m,则在最右能覆盖该城市的点 j = min(n–1, i+r) 上新增所需的机房数 need = m – (initial[i] + cur_add),并将 need 加到差分数组上。若累计新增量超出 k,则判定不可行。内容分发网络(CDN)机房通过将网站内容缓存到距离用户更近的位置,能够加快内容加载速度。假设一共有 n 座城市,下标从 0 到 n−1。整数数组 cities 表示每座城市当前已有的 CDN 机房数量,其中 cities[i] 是第 i 座城市已有的 CDN 机房数量。
每个 CDN 机房都有一个相同的服务覆盖半径 r。如果某个机房位于城市 i,那么它可以服务所有满足 ∣i−j∣≤r 的城市 j。这里 ∣x∣ 表示 x 的绝对值,例如 ∣5−3∣=2,∣4−9∣=5。
对于一座城市来说,它的服务质量被定义为能够覆盖到该城市的全部 CDN 机房数量,既包括已有的机房,也包括新建的机房。
现在你可以在全国范围内选择若干城市,新建恰好 k 个 CDN 机房。同一个城市允许重复建设多个机房。你需要决定这些新建机房的位置,使得所有城市中最小的服务质量尽可能大,并返回这个最大化的最小服务质量。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册