CF1741E Sending a Sequence Over the Network
题目描述
序列 $a$ 通过网络传输的方式如下:
1. 将序列 $a$ 拆分为若干段(每个元素恰好属于一个段,每个段是一组连续的元素);
2. 对于每一段,将其长度写在该段的左侧或右侧;
3. 得到的序列 $b$ 被发送到网络上。
例如,需要发送序列 $a = [1, 2, 3, 1, 2, 3]$。假设其被分段如下:$[\color{red}{1}] + [\color{blue}{2, 3, 1}] + [\color{green}{2, 3}]$。那么可能得到如下序列:
- $b = [1, \color{red}{1}, 3, \color{blue}{2, 3, 1}, \color{green}{2, 3}, 2]$,
- $b = [\color{red}{1}, 1, 3, \color{blue}{2, 3, 1}, 2, \color{green}{2, 3}]$,
- $b = [\color{red}{1}, 1, \color{blue}{2, 3, 1}, 3, 2, \color{green}{2, 3}]$,
- $b = [\color{red}{1}, 1, \color{blue}{2, 3, 1}, 3, \color{green}{2, 3}, 2]$。
如果采用不同的分段方式,发送的序列可能不同。
现在给定序列 $b$,请判断该序列 $b$ 是否可能是通过上述方式从某个序列 $a$ 发送得到的。换句话说,是否存在某个序列 $a$,使得将 $a$ 按上述规则处理后可以得到序列 $b$?
输入格式
输入的第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。
每个测试用例包含两行。
测试用例的第一行包含一个整数 $n$($1 \le n \le 2 \cdot 10^5$),表示序列 $b$ 的长度。
测试用例的第二行包含 $n$ 个整数 $b_1, b_2, \dots, b_n$($1 \le b_i \le 10^9$),表示序列 $b$ 本身。
保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。
输出格式
对于每个测试用例,输出一行:
- 如果序列 $b$ 可能是通过网络发送得到的,输出 YES;
- 否则输出 NO。
你可以用任意大小写输出 YES 和 NO(例如 yEs、yes、Yes 和 YES 都会被识别为肯定回答)。
说明/提示
在第一个样例中,序列 $b$ 可以由序列 $a = [1, 2, 3, 1, 2, 3]$ 经过如下分段得到:$[\color{red}{1}] + [\color{blue}{2, 3, 1}] + [\color{green}{2, 3}]$。序列 $b$ 为 $[\color{red}{1}, 1, \color{blue}{2, 3, 1}, 3, 2, \color{green}{2, 3}]$。
在第二个样例中,序列 $b$ 可以由序列 $a = [12, 7, 5]$ 经过如下分段得到:$[\color{red}{12}] + [\color{green}{7, 5}]$。序列 $b$ 为 $[\color{red}{12}, 1, 2, \color{green}{7, 5}]$。
在第三个样例中,序列 $b$ 可以由序列 $a = [7, 8, 9, 10, 3]$ 经过如下分段得到:$[\color{red}{7, 8, 9, 10, 3}]$。序列 $b$ 为 $[5, \color{red}{7, 8, 9, 10, 3}]$。
在第四个样例中,不存在任何序列 $a$,使得通过上述方式处理后可以得到序列 $b$。
由 ChatGPT 4.1 翻译