解题思路
操作在储能舱之间转移 1 单位电量,总量守恒,目标是变成回文且次数最少。
- 可行性:偶数长度时,回文序列总和必为偶数;若 n 为偶数且 ∑c 为奇数,无解,输出 −1。奇数长度总有解。
- 配对:最终必须 ci′=cn+1−i。对每个对称对 (i,n+1−i),两端差值 ∣ci−cn+1−i∣ 需要通过转移抹平。
- 代价:每次操作使某个舱 +1、另一舱 −1,全局最少次数等于所有对称对差值和的一半(向上取整),即 ⌈2∑∣ci−cn+1−i∣⌉。奇数差额可通过中间舱或其他配对消化。
复杂度分析
题目内容
某场站有 n 个储能舱,第 i 舱当前电量记为 ci。运维希望各舱电量呈左右对称,即最终序列为回文:对所有 1≤i≤n 均有 ci=cn+1−i。
每次操作可选两个不同下标 i,j,将 1 单位电量从 i 舱转到 j 舱:ci←ci−1,cj←cj+1。
求使序列变为回文的最少操作次数;若不可能,输出 −1。
输入描述
第一行一个整数 q(1≤q≤100000),表示询问个数。
每组询问:
- 第一行一个整数 n(1≤n≤200000);
- 第二行 n 个正整数 c1,c2,…,cn(1≤ci≤1000000000)。
保证单个文件中所有询问的 n 之和不超过 500000。
输出描述
对每个询问输出一行一个整数:最少操作次数,无解则 −1。
样例1
输入
3
4
3 1 4 2
2
2 2
3
4 2 9
输出
2
0
3
说明
电量总量守恒。第 1 个询问总和 10,对称对差 ∣3−2∣+∣1−4∣=4,最少 ⌈4/2⌉=2 次。
第 2 个询问已是回文,答案 0。
第 3 个询问只需两端相等,差 ∣4−9∣=5,最少 ⌈5/2⌉=3 次(例如得到 [6,2,6])。