CF2004F.Make a Palindrome

省选/NOI-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

给定一个由 nn 个整数构成的数组 aa。

定义函数 f(b)f(b) 表示将数组 bb 变为回文数组所需的最少操作次数。你可以进行以下两种操作:

  • 选择相邻的两个元素 bib_i 和 bi+1b_{i+1},将它们移除,并用一个元素 (bi+bi+1)(b_i + b_{i+1}) 替换;
  • 或者选择一个元素 bi>1b_i > 1,将其移除,并用两个正整数 xx 和 yy(x>0x > 0 且 y>0y > 0,且 x+y=bix + y = b_i)替换。

例如,对于数组 b=[2,1,3]b=[2, 1, 3],你可以通过一次操作得到以下数组之一:[1,1,1,3][1, 1, 1, 3],[2,1,1,2][2, 1, 1, 2],[3,3][3, 3],[2,4][2, 4],或 [2,1,2,1][2, 1, 2, 1]。

计算 (∑1≤l≤r≤nf(a[l..r]))\displaystyle \left(\sum_{1 \le l \le r \le n}{f(a[l..r])}\right),其中 a[l..r]a[l..r] 表示数组 aa 从下标 ll 到下标 rr 的子数组(包含两端)。换句话说,求数组 aa 所有子数组的函数 ff 值之和。

输入格式

第一行包含一个整数 tt(1≤t≤10001 \le t \le 1000),表示测试用例的数量。

每个测试用例的第一行包含一个整数 nn(1≤n≤20001 \le n \le 2000)。

第二行包含 nn 个整数 a1,a2,…,ana_1, a_2, \dots, a_n(1≤ai≤1051 \le a_i \le 10^5)。

输入的额外限制:所有测试用例中 nn 的总和不超过 20002000。

输出格式

对于每个测试用例,输出一个整数,表示数组 aa 所有子数组的函数 ff 值之和。

输入输出样例

  • 输入#1

    4
    3
    2 1 3
    4
    1 1 1 1
    5
    4 2 3 1 5
    4
    1 2 1 2

    输出#1

    3
    0
    14
    5

说明/提示

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页