CF2143A.All Lengths Subtraction

传统题 时间 2000 ms 内存 256 MiB 3 尝试 1 已通过 1 标签

All Lengths Subtraction

题目描述

给定一个长度为 nn 的排列 pp

你需要按照顺序对每个整数 kk11nn 依次进行一次操作:

  • 选择 pp 的一个长度恰为 kk 的子数组,将该子数组内的每个元素都减去 11

完成全部 nn 次操作后,你的目标是让数组 pp 的所有元素都变为 00

请判断是否可以达成目标。

一个长度为 nn 的排列是一个包含 11nnnn 个互不相同整数的数组。例如,[2,3,1,5,4][2,3,1,5,4] 是一个排列,但 [1,2,2][1,2,2] 不是排列(数字 22 在数组中出现了两次),[1,3,4][1,3,4] 也不是排列(n=3n=3,但出现了 44)。

数组 aa 是数组 bb 的子数组,如果 aa 可以由 bb 删除若干(可能为零或全部)开头的元素和若干(可能为零或全部)末尾的元素得到。

输入格式

每组测试包含多个测试用例。第一行输入一个整数 tt (1t1001 \le t \le 100),表示测试用例数量。

接下来每个测试用例包含两行:

第一行输入一个整数 nn (1n1001 \leq n \leq 100),表示排列的长度。

第二行输入 p1,p2,,pnp_1, p_2, \ldots, p_n (1pin1 \le p_i \le n),表示排列本身。

输出格式

对于每个测试用例,如果可以在所有操作之后使数组 pp 的所有元素都变为 00,输出 "YES";否则输出 "NO"。

答案可以用任意大小写输出。例如,"yEs", "yes", "Yes" 和 "YES" 都会被识别为正确答案。

说明/提示

对于第一个测试用例,可以按照以下步骤操作:

  • k=1k=1:选择子数组 [3,3][3,3],数组 [1,3,4,2][1,3,4,2] 变为 [1,3,3,2][1,3,3,2]
  • k=2k=2:选择子数组 [2,3][2,3],数组 [1,3,3,2][1,3,3,2] 变为 [1,2,2,2][1,2,2,2]
  • k=3k=3:选择子数组 [2,4][2,4],数组 [1,2,2,2][1,2,2,2] 变为 [1,1,1,1][1,1,1,1]
  • k=4k=4:选择子数组 [1,4][1,4],数组 [1,1,1,1][1,1,1,1] 变为 [0,0,0,0][0,0,0,0]

因此,数组元素全部归零,答案为 YES。

对于第二个测试用例,可以证明无法将所有元素归零。

对于第三个测试用例,操作过程如下:

$[2, 4, \boldsymbol{5}, 3, 1] \rightarrow [2, \boldsymbol{4, 4}, 3, 1] \rightarrow [2, \boldsymbol{3, 3, 3}, 1] \rightarrow [\boldsymbol{2, 2, 2, 2}, 1] \rightarrow [\boldsymbol{1, 1, 1, 1, 1}] \rightarrow [0, 0, 0, 0, 0]$。

加粗的数表示每一步操作中被选中的子数组。

对于第四个测试用例,也可以证明无法将所有元素归零。

由 ChatGPT 5 翻译

样例

4
4
1 3 4 2
5
1 5 2 4 3
5
2 4 5 3 1
3
3 1 2
YES
NO
YES
NO

在线编程 IDE

建议全屏模式获得最佳体验