CF2143A All Lengths Subtraction
题目描述
给定一个长度为 $n$ 的排列 $p$。
你需要按照顺序对每个整数 $k$ 从 $1$ 到 $n$ 依次进行一次操作:
- 选择 $p$ 的一个长度恰为 $k$ 的子数组,将该子数组内的每个元素都减去 $1$。
完成全部 $n$ 次操作后,你的目标是让数组 $p$ 的所有元素都变为 $0$。
请判断是否可以达成目标。
一个长度为 $n$ 的排列是一个包含 $1$ 到 $n$ 这 $n$ 个互不相同整数的数组。例如,$[2,3,1,5,4]$ 是一个排列,但 $[1,2,2]$ 不是排列(数字 $2$ 在数组中出现了两次),$[1,3,4]$ 也不是排列($n=3$,但出现了 $4$)。
数组 $a$ 是数组 $b$ 的子数组,如果 $a$ 可以由 $b$ 删除若干(可能为零或全部)开头的元素和若干(可能为零或全部)末尾的元素得到。
输入格式
每组测试包含多个测试用例。第一行输入一个整数 $t$ ($1 \le t \le 100$),表示测试用例数量。
接下来每个测试用例包含两行:
第一行输入一个整数 $n$ ($1 \leq n \leq 100$),表示排列的长度。
第二行输入 $p_1, p_2, \ldots, p_n$ ($1 \le p_i \le n$),表示排列本身。
输出格式
对于每个测试用例,如果可以在所有操作之后使数组 $p$ 的所有元素都变为 $0$,输出 "YES";否则输出 "NO"。
答案可以用任意大小写输出。例如,"yEs", "yes", "Yes" 和 "YES" 都会被识别为正确答案。
说明/提示
对于第一个测试用例,可以按照以下步骤操作:
- $k=1$:选择子数组 $[3,3]$,数组 $[1,3,4,2]$ 变为 $[1,3,3,2]$。
- $k=2$:选择子数组 $[2,3]$,数组 $[1,3,3,2]$ 变为 $[1,2,2,2]$。
- $k=3$:选择子数组 $[2,4]$,数组 $[1,2,2,2]$ 变为 $[1,1,1,1]$。
- $k=4$:选择子数组 $[1,4]$,数组 $[1,1,1,1]$ 变为 $[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 翻译