Loading

[题解]P9749 [CSP-J 2023] 公路

思路

首先由一个显然的贪心,对于每一个站点 \(i\),它显然会只会加刚好到下一个满足 \(d_i > d_j\) 的站点 \(j\)

但是这个贪心是由瑕疵的,因为我们只能加正整数的油,所以说难免会有多出的部分,所以需要特殊处理此部分。

那么求一个位置之后第一个大于它的数,可以直接用单调栈维护即可。

用单调栈可以求出一个 \(nxt_i\) 表示在 \(i\) 之后第一个满足 \(d_i > d_j\)\(j\)。并且令 \(res\) 表示上一次加油行驶到当前站点还能行驶的距离。

因此,可以简单分讨一下(其中 \(dist\) 表示从 \(i\)\(j\) 的距离):

  1. \(res \leq dist\) 时,说明我们还需要在上一次剩下的油的基础上走 \(dist - res\),所以需要多加 \(\lceil \frac{dist - res}{D} \rceil\) 的油。然后更新答案和 \(res\)

  2. \(res > dist\) 时,说明我们在当前站点无需加油,可以直接行驶至 \(nxt_i\),并更新 \(res\)\(res - dist\)

code


posted @ 2023-10-29 00:25  BeautifulWish  阅读(209)  评论(0编辑  收藏  举报