首页 > 试题广场 >

Bracket Coloring

[编程题]Bracket Coloring
  • 热度指数:27 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}小苯有一个长度为 n、仅由字符 \texttt{‘(’}\texttt{‘)’} 组成的括号序列 s,且保证这是一个合法括号序列^\texttt{[1]}

\hspace{15pt}现在他想给每个括号染上红色或蓝色,但需要满足以下条件:
\hspace{23pt}\bullet\,每一对相互匹配的括号^\texttt{[2]}必须染上相同的颜色(即一个 \texttt{‘(’} 和它对应的 \texttt{‘)’} 颜色必须相同)
\hspace{23pt}\bullet\,若序列中两个相邻位置的括号字符相同(同为 \texttt{`('} 或同为 \texttt{`)'}),则它们的颜色不能相同。

\hspace{15pt}请计算有多少种不同的染色方案。由于答案可能很大,请将答案对 998\,244\,353 取模后输出。

【名词解释】
\hspace{15pt}合法的括号序列^\texttt{[1]}:如果在括号序列中插入字符 \texttt{+}\tt 1 就可以得到正确的算术表达式,那么这个括号序列就称为合法的括号序列。例如,\texttt{\texttt{\texttt{ 是合法的括号序列,因为填入内容后可以表示为 \texttt{\texttt{\texttt{。更严格地,一个括号序列被称为合法的括号序列,当且仅当:
{\hspace{20pt}}_\texttt{1.}\,空串是合法的括号序列;
{\hspace{20pt}}_\texttt{2.}\,如果 A 是合法的括号序列,那么 \texttt{ 也是合法的括号序列;
{\hspace{20pt}}_\texttt{3.}\,如果 AB 都是合法的括号序列,那么 AB 也是合法的括号序列。

\hspace{15pt}相互匹配的括号^\texttt{[2]}:在合法括号序列中,若左括号 s_i 与右括号 s_j 满足 i < j,且 s_{i+1} s_{i+2} \cdots s_{j-1} 也是一个合法括号序列,则称这两个位置的括号是相互匹配的。

输入描述:
\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leqq T\leqq 10^4\right) 代表数据组数,每组测试数据描述如下:

\hspace{15pt}第一行一个整数 n\left(2 \leqq n \leqq 2 \times 10^5\right),保证 n 为偶数。
\hspace{15pt}第二行一个长度为 n、仅由字符 \texttt{‘(’}\texttt{‘)’} 组成的括号序列 s,且保证这是一个合法括号序列。

\hspace{15pt}除此之外,保证所有测试数据的 n 之和不超过 2 \times 10^5


输出描述:
\hspace{15pt}对于每组数据,新起一行输出一个整数,表示染色方案数对 998\,244\,353 取模后的结果。
示例1

输入

3
2
()
4
(())
6
()(())

输出

2
2
4

这道题你会答吗?花几分钟告诉大家答案吧!