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)\)。