本题要求判断初始序列能否通过若干次操作变为镜像序列(即回文序列),若能则输出总操作次数最小的方案。每次操作可以选择相邻的两个元素同时加 1。
核心观察:为了得到镜像序列,必须让对称位置的元素相同。由于操作同时影响两个相邻元素,采用双指针从两端向中间贪心调整是合理的。
算法步骤(设序列下标从 0 开始,输出下标转换为从 1 开始):
ops 记录在每个位置 i 执行操作的累计次数。给定一个长度为 n 的整数序列 a1,a2,…,an。你可以执行任意次以下操作:选择一个位置 i (1≤i<n),将 ai 和 ai+1 的值同时增加 1。
经过操作后的序列若满足对任意 1≤i≤n 均有 bi=bn+1−i,则称其为镜像序列。
请你判断能否使序列变为镜像序列,若能,请输出一个总操作次数最小的方案;否则输出 −1。
数据范围:序列长度 n 不超过 10^5。序列中的元素均为正整数,且不超过 10^9。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.