CF2084H Turtle and Nediam 2
题目描述
[LGR-205-Div.1 C Turtle and Nediam](https://www.luogu.com.cn/problem/P11283)
给定一个长度为 $n$ 的二进制序列 $s$,仅由 $0$ 和 $1$ 组成。
你可以进行最多 $n - 2$ 次(可以是零次)以下操作:
- 设当前序列 $s$ 的长度为 $m$。选择一个整数 $i$ 满足 $1 \le i \le m - 2$。
- 设子数组 $[s_i, s_{i + 1}, s_{i + 2}]$ 的中位数 $^{\text{∗}}$ 为 $x$,并令 $j$ 为满足 $j \ge i$ 且 $s_j = x$ 的最小整数。
- 从序列中移除 $s_j$ 并将剩余部分拼接。换句话说,将 $s$ 替换为 $[s_1, s_2, \ldots, s_{j - 1}, s_{j + 1}, s_{j + 2}, \ldots, s_m]$。
注意每次操作后,序列 $s$ 的长度会减少 $1$。
求经过若干次操作后,可以得到的不同二进制序列的数量,结果对 $10^9 + 7$ 取模。
$^{\text{∗}}$ 长度为奇数 $k$ 的数组的中位数是指排序后的第 $\frac{k + 1}{2}$ 个元素。
输入格式
每个测试包含多个测试用例。第一行包含测试用例的数量 $t$($1 \le t \le 10^4$)。接下来是每个测试用例的描述。
每个测试用例的第一行包含一个整数 $n$($3 \le n \le 2 \cdot 10^6$)——二进制序列的长度。
第二行包含一个长度为 $n$ 的字符串 $s$,仅由 $0$ 和 $1$ 组成。
保证所有测试用例的 $n$ 之和不超过 $2 \cdot 10^6$。
输出格式
对于每个测试用例,输出一个整数——可以得到的二进制序列的数量,对 $10^9 + 7$ 取模。
说明/提示
- 在第一个测试用例中,可以得到以下二进制序列:$[1, 1]$、$[1, 1, 1]$、$[1, 1, 1, 1]$、$[1, 1, 1, 1, 1]$。
- 在第二个测试用例中,可以得到以下二进制序列:$[0, 1]$、$[0, 1, 1]$、$[1, 0, 1]$、$[1, 0, 0, 1]$、$[1, 0, 1, 1]$、$[1, 0, 0, 0, 1]$、$[1, 0, 0, 1, 1]$、$[1, 0, 0, 0, 1, 1]$。例如,要得到 $[0, 1, 1]$,可以:
- 选择 $i = 2$。子数组 $[0, 0, 0]$ 的中位数为 $0$。移除 $s_2$,序列变为 $[1, 0, 0, 1, 1]$。
- 选择 $i = 1$。子数组 $[1, 0, 0]$ 的中位数为 $0$。移除 $s_2$,序列变为 $[1, 0, 1, 1]$。
- 选择 $i = 1$。子数组 $[1, 0, 1]$ 的中位数为 $1$。移除 $s_1$,序列变为 $[0, 1, 1]$。
翻译由 DeepSeek V3 完成