P16332 [DSDOI Round 1] 邓少笔记本
题目描述
邓少的笔记本上有一个长度为 $n$ 的括号序列 $S$。$S$ 仅由 $\texttt{()*}$ 三种字符组成,其中 $\texttt{*}$ 可以变化成一个 $\texttt{(}$ 或 $\texttt{)}$。
邓少认为一个括号序列是“好的”,当且仅当它满足以下条件:
> 对于该序列中 $\texttt{*}$ 的所有可能的变化,都存在一种在这个序列末尾**恰好**添加 $k$ 个**任意括号**的方式,使得整个序列成为合法的括号序列。
例如,当 $k=3$ 时,括号序列 $\texttt{(*(}$ 是“好的”。因为:
- 当 $\texttt{*}$ 变化成 $\texttt{(}$ 时,存在括号序列 $\texttt{((()))}$ 满足上述条件;
- 当 $\texttt{*}$ 变化成 $\texttt{)}$ 时,存在括号序列 $\texttt{()()()}$ 满足上述条件。
而当 $k=3$ 时,括号序列 $\texttt{*((}$ 不是“好的”。因为当 $\texttt{*}$ 变化成 $\texttt{)}$ 时,没有任何一种在末尾恰好添加 $k$ 个任意括号的方式能使该括号序列合法。
需要注意的是,每个 $\texttt{*}$ 可独立变成任意一个括号。也就是说,**每一个 $\texttt{*}$ 的变化情况都不会对其他任何 $\texttt{*}$ 的变化造成影响**。
现在邓少找到了你,希望你告诉他,有多少个不同的 $0 \le x < n$ 满足:将这个括号序列循环左移 $x$ 位后,形成的括号序列是“好的”。
输入格式
**本题有多组测试数据。**
第一行包含一个正整数 $T$,表示数据组数。
接下来包含 $T$ 组数据,每组数据的格式如下:
第一行包含两个正整数 $n,k$,含义如题所示。
第二行包含一个长为 $n$ 的字符串 $S$,表示该括号序列。保证 $S$ 仅由 $\texttt{(}$、$\texttt{)}$ 和 $\texttt{*}$ 三种字符组成。
输出格式
对于每组测试数据:
输出一行,包含一个整数,表示满足条件的 $x$ 的数量。
说明/提示
### 【样例解释】
对于第一组测试数据:
- $x = 0$,此时括号序列为 $\texttt{((*}$。
- 当 $\texttt{*}$ 变化成 $\texttt{(}$ 时,存在括号序列 $\texttt{((()))}$ 满足要求;
- 当 $\texttt{*}$ 变化成 $\texttt{)}$ 时,存在括号序列 $\texttt{(()())}$ 满足要求。
- $x = 1$,此时括号序列为 $\texttt{(*(}$。
- 当 $\texttt{*}$ 变化成 $\texttt{(}$ 时,存在括号序列 $\texttt{((()))}$ 满足要求;
- 当 $\texttt{*}$ 变化成 $\texttt{)}$ 时,存在括号序列 $\texttt{()()()}$ 满足要求。
- $x = 2$,此时括号序列为 $\texttt{*((}$。
- 当 $\texttt{*}$ 变化成 $\texttt{(}$ 时,存在括号序列 $\texttt{((()))}$ 满足要求;
- 当 $\texttt{*}$ 变化成 $\texttt{)}$ 时,括号序列为 $\texttt{)((}$,无法通过在序列末尾添加 $3$ 个括号使其变为合法括号序列。因此,$x=2$ 不合法。
综上,有两个 $x$ 满足要求,答案为 $2$。
对于第二组测试数据,不存在任何一种方法能满足要求。
对于第三组测试数据,只有 $x = 4,5,6$ 满足要求。
### 【数据范围】
对于所有测试数据,保证:
- $1 \le T \le 10$;
- $1 \le n,k \le 10^6$;
- $(n+k) \bmod 2 = 0$;
- $S$ 仅由 $\texttt{()*}$ 三种字符组成。
| 测试点编号 | $T \le$ | $n,k \le$ | 特殊性质 |
| :-: | :-: | :-: | :-: |
| $1$ | $1$ | $10$ | $-$ |
| $2$ | $5$ | ^ | ^ |
| $3 \sim 4$ | $1$ | $10^3$ | ^ |
| $5 \sim 6$ | $5$ | ^ | ^ |
| $7$ | ^ | $10^5$ | $A$ |
| $8$ | ^ | ^ | $B$ |
| $9$ | ^ | ^ | $C$ |
| $10$ | ^ | ^ | $-$ |
| $11 \sim 12$ | $1$ | $10^6$ | ^ |
| $13$ | $5$ | ^ | $A$ |
| $14$ | ^ | ^ | $B$ |
| $15$ | ^ | ^ | $C$ |
| $16 \sim 25$ | $10$ | ^ | $-$ |
- 特殊性质 $A$:保证 $n = k$。
- 特殊性质 $B$:保证 $S$ 仅由 $\texttt{(}$ 和 $\texttt{)}$ 组成。
- 特殊性质 $C$:保证 $S$ 仅由 $\texttt{(}$ 和 $\texttt{*}$ 组成。