#6469. 爱丽丝能走多远 (GoFarAlice)
爱丽丝能走多远 (GoFarAlice)
题目 3:爱丽丝能走多远 (GoFarAlice)
| 属性 | 规格 |
|---|---|
| 输入文件 | 标准输入 (Standard Input) |
| 输出文件 | 标准输出 (Standard Output) |
| 时间限制 | 1.0 秒 |
| 内存限制 | 1024 MB |
题目描述
爱丽丝想要走得尽可能远。她计划开着她的车沿着一条路向 方向前进。
- 耗油量:每单位距离消耗 1 升燃料。
- 燃料容量:油箱容量无限大。
- 初始状态:爱丽丝初始拥有 元钱,油箱初始为 0。
- 城市与加油:路线上有 个城市。第 个城市位于坐标 ,每升燃料的价格为 。爱丽丝只能购买整数单位(升)的燃料。
- 目标:通过计算在哪些城市购买多少燃料,算出爱丽丝能到达的最大距离。
输入格式
- 第一行:两个空格分隔的整数 () 和 ()。
- 接下来的 行:每行两个整数 () 和 (),代表城市坐标和油价。
- 保证: 且 。
输出格式
- 输出一个整数,代表爱丽丝能行驶的最大距离。
使用算法:单调栈 + 贪心算法 (Greedy with Monotonic Stack)
核心逻辑:
- 贪心策略:如果你在城市 A,你应该只买足够的油走到下一个比 A 油价更便宜的城市 B。因为在 B 买油更划算。
- 寻找下一个更便宜的城市:
- 如果能找到下一个更便宜的城市,就购买刚好能到达那里的油。
- 如果当前城市已经是后面所有城市中最便宜的,或者后面没有城市了,那么就把剩下的钱全部在这里买油,走得越远越好。
- 单调栈优化:由于我们需要快速找到右侧第一个比当前值小的数,使用单调栈可以将时间复杂度优化到 。