CF1091F 题解

blog。提供线性做法,各方面完爆反悔贪心。


先钦定能不飞就不飞,最后再分配盈余的能量。

可能会在飞 Lava 的时候不够能量,只需要在前面来回移动,刷能量即可。

由于 Swim 比 Walk 快,所以能 Swim 就全部用 Swim 刷能量,不能就 Walk。

最后是分配盈余能量。显然优先把 Walk 换成 Fly,换一格会快 \(4s\),能量减少 \(2\)。Swim 同理。

那么能换多少呢?发现在「不够能量」时必须把前面的能量留下,所以这时在前面的 Land 换是不优的。

所以,累加可以换的最大 Land 长度,结束时与 \(\dfrac{\text{能量}}2\) 取 min 即可。


直接 double 实现 \(\dfrac{\text{能量}}2\),所以翻倍存储即可。

code,时间复杂度 \(O(n)\)

posted @ 2024-03-20 17:39  liangbowen  阅读(6)  评论(0编辑  收藏  举报