LOJ3494「JOISC 2021 Day3」保镖 题解
JOI 街是一条贯通东西的长街。我们将其抽象为一条数轴。
从现在起,将有 个贵宾(VIP)来到 JOI 街并大逛特逛。VIP 们以 到 编号。VIP 将会在时刻 从坐标 前往坐标 。其速度是每单位时间 单位长度。
如果 ,VIP 将会以不变的速度在正方向上移动。类似地,如果 ,VIP 将会以不变的速度在负方向上移动。
一个保镖的工作是在 JOI 街上巡逻并保护 VIP 们。为了保护一个 VIP,很有必要和 TA 一起逛一会街,同时保护 TA。当然,允许保镖在他们逛街逛到一半时才开始保护,或在他们逛街结束前就停止保护。开始和停止保护的时刻不必为一个整数。
特别地,尽管可能有多个 VIP 在同一坐标,保镖也最多只能保护一个 VIP。
保镖可以在 JOI 街上以每单位时间最多 单位长度的速度随意走动。在他们停止保护一个 VIP 之后,可以去到另一个地方再开始保护另一个 VIP。如果一个保镖和 VIP 一起逛街,那么 VIP 将会对他们一起走过的距离的每单位长度给保镖 元小费。这里保证 是偶整数。
作为一个安保公司的员工,您正在计划 份保护 VIP 的方案。这些方案以 到 编号。对于方案 ,一个保镖在时刻 时从坐标 开始工作。您的任务是分别最大化每个方案中的保镖能够得到的总小费。
请您编写一个程序对于给定的 VIP 和保镖的信息,计算每一个方案中保镖的最大总小费。
在此题的限制下,可以证明答案一定是个整数。
,。
数据结构
斜率优化
李超树
坐标转换
神仙的题目,曾经的噩梦。
原来的问题是一个一维的,但是还有根据时间的决策,于是我们可以把位置当做 轴,时间当做 轴,建立一个二维的坐标系描述问题。
那么每一个 VIP 的走路方向就是从 ,是一条斜率为 或者 的直线,为了方便,我们可以将整个坐标轴顺时针旋转 度,也就是将 但是会将距离 ,有因为之前转换成二维问题,也将距离 ,于是总共答案 ,那么我们可以将 除以 (所以 是偶数?)。
为了方便,我们可以将所有 VIP 坐标离散化,那么转化出了一个 的网格图,然后转化后的问题如下:
有一张网格图,沿着每次只能向下或者向左走,每个网格图上的边都有自己的边权 ,只要沿着该边走 步,那么可以获得 的收益。
现在给出 个初始点,问走出的最大收益是什么?
因为网格图的大小可以承受,于是我们可以用 DP 求出当走到网格图格点 上的最大收益 。
然后考虑从一个非格点的最大收益,最优方案一定是 先向左走到某一条网格边上然后向下走到格点 / 先向下走到某一条边上然后向左走到格点。
先将所有询问离线,然后考虑每一行 / 每一列,计算 先向左再向下 / 先向下再向左 的贡献。
注意到所有贡献是一个一次函数的形式,于是可以李超树求解,复杂度 。
但是注意到 DP 数组有单调性,也就是每次加入的线段斜率必须递减,否则不优,于是可以用单调栈 + 二分维护,具体维护的是一个上凸壳,但是因为插入线段的 值依次递减,相当于我们在倒着插入,于是可以将图像关于 轴对称,然后就是正着插入了,复杂度 。
具体实现有亿些细节,可以看代码。
btw,本来这个代码可以更短的,但是在校内 OJ 上被卡空间了,很有可能是因为评测机是 位,于是开的一堆 vector
就炸了,于是将原来 的 vector
变成了 的 vector
,常数空间有所优化,终于在校内 OJ 上卡过去了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
2021-02-24 Template