AcWing 5993. 回文数组
原题链接
中等
作者:
yumi.
,
2025-04-01 22:19:01
·江苏
,
所有人可见
,
阅读 4
n = int(input())
import sys
inp = list(map(int,sys.stdin.readline().split()))
# 构建回文数组,只需要把原始输入一分为二,然后计算每个相应位置的distance就行了
template = inp[:n
original = [inp[i] for i in range(n-1,n
def dis(s1,s2):
length = n
distance = []
for i in range(length):
distance.append(original[i] - template[i])
return distance
ori_dis = dis(template,original)
def work():
length = n
cnt = 0
# 逐个判断相邻序列的距离,如果同号,那么就取两个序列中距离较小值(同时加1或者减1的操作数量),然后更新这两个序列的距离
# 同时操作的计数结束后,加上剩下的只能单一操作的所有数,得到ans
for i in range(length-1):
if ori_dis[i]*ori_dis[i+1] > 0:
res = min(abs(ori_dis[i]),abs(ori_dis[i+1]))
if ori_dis[i] < 0:
ori_dis[i] += res
ori_dis[i+1] += res
else:
ori_dis[i] -= res
ori_dis[i+1] -= res
cnt += res
for num in ori_dis:
cnt += abs(num)
return cnt
print(work())