解题思路
本题的核心在于分析交换操作的免费条件,并根据不同的 k 取值,将最少体力消耗转化为不同的逆序对统计问题。货箱的优先级编号恰好是 1 到 n 的一个排列,记为 a1,a2,…,an。
-
情况一:k≥3
由于交换时优先级差的绝对值大于 1 时不消耗体力,且允许交换的两个货箱优先级差值最大为 k(至少为 3)。借助差值为 2 或以上的免费交换,可以在不消耗任何体力的情况下连通任意两个货箱,并完成整个排列的排序。因此答案为 0。
-
情况二:k=1
此时只允许交换优先级差值为 1 的货箱,每次交换恰好消耗 1 单位体力。这等价于只能进行相邻元素的交换。将一个排列通过相邻交换变为升序所需的最少交换次数,等于原排列的逆序对总数。每消除一个逆序对至少需要一次相邻交换,而存在一种交换顺序使得总消耗恰好等于逆序对数。因此答案为 ∑1≤i<j≤n[ai>aj],可以使用归并排序在 O(nlogn) 时间内求出。