#6577. 镜像序列 (Mirror Array / Огледална низа)

镜像序列 (Mirror Array / Огледална низа)

题目名称:镜像序列 (Mirror Array / Огледална низа)

版权信息:2021年马其顿编程竞赛 - 社区与地区赛 (Macedonian Programming Contests 2021 - Community and Regional Competition)

题目描述

一个由 NN 个整数组成的序列 AA (A[1],A[2],,A[N]A[1], A[2], \dots, A[N]) 被称为镜像序列(回文序列),如果对于所有的 ii 都满足 A[i]=A[Ni+1]A[i] = A[N-i+1]。换句话说,无论你是从前向后读,还是从后向前读,该序列都是相同的。

现在你有一个可能不是镜像的序列。你希望通过执行以下操作任意次,将其变为镜像序列:

  • 合并操作:选择序列中两个相邻的数字,并将它们替换为它们的

请注意,每执行一次该操作,序列的元素个数就会减少一个。你的任务是编写一个程序,计算为了使序列变为镜像序列,最少需要执行多少次合并操作。


输入格式

  • 第一行:一个整数 NN (1N1,000,0001 \le N \le 1,000,000)。
  • 第二行:NN 个正整数,代表初始序列的元素。每个元素均小于 1,000,000,0011,000,000,001

评分说明:

  • 对于 30% 的测试用例:N10N \le 10
  • 对于 60% 的测试用例:N1,000N \le 1,000
  • 对于全部测试用例:N1,000,000N \le 1,000,000

输出格式

  • 第一行:输出使序列变为镜像所需的最少操作次数。

限制条件

  • 时间限制:150 毫秒
  • 内存限制:64 MB

样例数据

输入 输出 解释 (合并过程)
3
2 2 4
1 (2+2) 4 \rightarrow 4 4
5
1 3 4 7 1
1 (3+4) 7 1 \rightarrow 1 7 7 1
4
1 7 3 5
2 (1+7) 3 5 \rightarrow 8 3 5 \rightarrow 8 (3+5) \rightarrow 8 8