#1157. 括号问号

括号问号

题目描述

对于一个包含 (、) 和 ? 的字符串 SS,定义 f(S)f(S) 为:将 SS 中的每个 ? 分别替换成一个 ( 或 ),可能得到的合法括号串的方案数。

给定长度为 nn,且只包含 (、) 和 ? 的字符串 TT,对于所有 2n2^n 个 TT 的子序列串 T′T'(包含空串,不要求连续,并且原串不同位置得到的串分别计算),求 f(T′)f(T') 之和,对 998244353998244353 取模。

合法括号串的定义:

  • 空串是合法括号串。
  • 如果 A,BA,B 都是合法括号串,那么它们前后连接得到的 ABAB 也是合法括号串。
  • 如果 AA 是合法括号串,那么在 AA 外面包裹一对括号得到的 (A)\mathtt{(}A\mathtt{)} 也是合法括号串。
  • 一个串是合法括号串,当且仅当它是有限长的,并且能用有限步以上几种方式构造出来。

输入格式

从文件 bracket.in 中读入数据。

第一行一个正整数 nn。

第二行一个字符串 TT。

输出格式

输出到文件 bracket.out 中。

输出一行一个整数表示答案。

样例 1 输入

4
(?)?

样例 1 输出

7

样例 1 解释

子序列串 所有方案 方案数
空串 11
( 00
?
)
?
(? () 11
()
(?
?)
??
)? 00
(?)
(??
()?
?)?
(?)? (()) 11

样例 2 输入

50
???)??)?(?)(?(??)????(?)?))?)((?()??(??))(()()((?(

样例 2 输出

827536427

样例 3

见选手目录下的 bracket/bracket3.in 与 bracket/bracket3.ans。

该样例满足第 13∼1613\sim16 个测试点的限制。

样例 4

见选手目录下的 bracket/bracket4.in 与 bracket/bracket4.ans。

该样例满足第 17∼2017\sim20 个测试点的限制。

数据范围

对于所有测试数据,保证:1≤n≤50001\le n\le5000,TT 的长度为 nn,且只由 (、) 和 ? 组成。

测试点 nn 特殊性质
1∼41\sim4 ≤6\le6 无特殊性质
5∼85\sim8 ≤20\le20
9∼129\sim12 ≤50\le50
13∼1613\sim16 ≤500\le500
17∼2017\sim20 ≤5000\le5000

共有 2020 个测试点,每个测试点独立计 55 分。

统计

相关

在下列比赛中:

第四套