CF1770G Koxia and Bracket

题目描述

Chiyuu 有一个长度为 $n$ 的括号序列 $s$。令 $k$ 为 Chiyuu 需要从 $s$ 中删除的最少字符数,使得 $s$ 变为平衡括号序列。 现在,Koxia 想让你计算有多少种方法可以从 $s$ 中删除 $k$ 个字符,使得 $s$ 变为平衡括号序列。由于答案可能很大,请对 $998\,244\,353$ 取模。 注意,只有当删除字符的下标集合不同,才认为两种删除方式是不同的。 $^\dagger$ 括号序列是仅包含字符 "(" 和 ")" 的字符串。 $^\ddagger$ 如果一个括号序列可以通过添加字符 + 和 1 变成一个合法的数学表达式,则称其为平衡括号序列。例如,序列 (())()、()、((()())) 和空串是平衡的,而 )(、(()、和 (()))( 不是。

输入格式

输入的第一行包含一个字符串 $s$($1 \leq |s| \leq 5 \cdot 10^5$)——括号序列。 保证 $s$ 只包含字符 "(" 和 ")"。

输出格式

输出一个整数,表示有多少种方法可以从 $s$ 中删除 $k$ 个字符,使得 $s$ 变为平衡括号序列。答案对 $998\,244\,353$ 取模。

说明/提示

在第一个测试用例中,可以证明 Chiyuu 需要删除的最少字符数为 $2$。有 $4$ 种方法可以删除 $2$ 个字符使 $s$ 变为平衡括号序列,具体如下。被删除的字符用红色标记。 - $\texttt{(} \color{Red}{\texttt{)}} \texttt{)} \color{Red}{\texttt{(}} \texttt{(} \texttt{)}$, - $\texttt{(} \texttt{)} \color{Red}{\texttt{)}} \color{Red}{\texttt{(}} \texttt{(} \texttt{)}$, - $\texttt{(} \color{Red}{\texttt{)}} \texttt{)} \texttt{(} \color{Red}{\texttt{(}} \texttt{)}$, - $\texttt{(} \texttt{)} \color{Red}{\texttt{)}} \texttt{(} \color{Red}{\texttt{(}} \texttt{)}$。 在第二个测试用例中,唯一的方法是删除唯一的字符,得到一个空括号序列,空串被认为是平衡的。 由 ChatGPT 4.1 翻译