用双指针维护当前仍在两端的船:左指针 i 指向当前最左存活船,右指针 j 指向当前最右存活船;并维护当前轮到“左端先打”还是“右端先打”的布尔量 left(初始为“左端先打”,即 left=true)。
设当前两端剩余耐久分别为 L(即 ai 的剩余)与 R(即 aj 的剩余)。从当前轮次开始,攻击顺序是严格左右交替,因此:
据此可以 一次性 计算让某一端被打沉所需的最少攻击次数:
n 艘船出发去探索海洋深处。这些船编号从 1 到 n ,按升序依次排列;第 i 艘船的耐久度为 ai 。
海怪按特定顺序对这些船发动了 k 次攻击。首先,它攻击第一艘船,然后是最后一艘,接着又攻击第一艘,依此类推。
海怪的每次攻击都会使船的耐久度降低 1 。当船的耐久度降至 0 时,它就会沉没,不再受到攻击(因此该船不再是第一艘或最后一艘,海怪只会攻击尚未沉没的船)。如果所有船都沉没了,海怪就没有可攻击的目标,便会游走。
例如,如果 n=4,k=5,且 a=[1,2,4,3] ,将会发生以下情况: