#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[N−i+1]A[i] = A[N-i+1]。换句话说,无论你是从前向后读,还是从后向前读,该序列都是相同的。

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

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

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


输入格式

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

评分说明:

  • 对于 30% 的测试用例:N≤10N \le 10。
  • 对于 60% 的测试用例:N≤1,000N \le 1,000。
  • 对于全部测试用例:N≤1,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