CFCF2190B2.Sub-RBS (Hard Version)

提高+/省选-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

本题为该问题的困难版本。不同版本间的差异在于:本版本需要计算 ss所有子序列的得分之和;ss 不一定是正则括号序列;同时对 nn 的约束条件更宽松。

我们称括号序列 aa 比括号序列 bb 更优,当且仅当满足以下任一条件:

  1. bbaa 的前缀,但 aba \ne b
  2. iiaabb 第一个出现字符不同的位置(若存在),且满足 ai=(a_i = \texttt{(}bi=)b_i = \texttt{)}

对于任意括号序列 tt,其得分定义如下:

  1. tt 不是正则括号序列^{∗},则得分为 00
  2. 若存在 tt 的一个正则括号子序列^{†} rr 满足 rrtt 更优,则得分为所有此类子序列 rr 的长度 r|r| 的最大值;
  3. 否则,得分为 00

换句话说,tt 的得分等于:tt 的所有“比 tt 更优”的正则括号子序列中,最长子序列的长度。若 tt 不是正则括号序列,或不存在比 tt 更优的正则子序列,则得分为 00

给定一个长度为 nn 的括号序列 ss,请计算 ss 的所有非空子序列的得分之和,并对 998244353998\,244\,353 取模。

^{∗} 正则括号序列(Regular Bracket Sequence, RBS)的定义:将序列中原有字符间插入字符 1\texttt{1}+\texttt{+} 后,能转化为合法算术表达式的括号序列。例如:

  • 括号序列 ()()\texttt{()()}(())\texttt{(())} 是正则的(转化后的表达式分别为 (1)+(1)\texttt{(1)+(1)}((1+1)+1)\texttt{((1+1)+1)});
  • 括号序列 )(\texttt{)(}(\texttt{(})\texttt{)} 不是正则的。

^{†} 子序列的定义:若序列 aa 可通过删除序列 bb 中任意位置的若干个(可能为 0 个或全部)元素得到,则称 aabb 的子序列。

输入格式

输入包含多组测试用例。第一行输入测试用例数 tt1t301 \le t \le 30),后续为各测试用例的描述。

每组测试用例的第一行输入一个整数 nn1n1001 \le n \le 100),表示字符串 ss 的长度。
第二行输入一个长度为 nn 的字符串 ss,仅由字符 (\texttt{(})\texttt{)} 组成。

保证所有测试用例的 nn 之和不超过 100100

输出格式

对于每组测试用例,输出一个整数:ss 的所有非空子序列的得分之和,对 998244353998\,244\,353 取模后的结果。

输入输出样例

  • 输入#1

    5
    1
    (
    6
    ()()()
    6
    (())()
    8
    (())()()
    22
    ()()())()()(()()()((()

    输出#1

    0
    4
    0
    22
    563070

说明/提示

第一个样例中,唯一的非空子序列是 g=(g = \texttt{(}。它不是正则括号序列,因此得分为 00,总和也为 00

第二个样例中,考虑子序列 g=s=()()()g = s = \texttt{()()()}:它是正则括号序列。我们可以选择 r=(())r = \texttt{(())}gg 的一个子序列),rrgg 第一个出现差异的位置是 i=2i=2,且 r2=(r_2 = \texttt{(}g2=)g_2 = \texttt{)},因此 rrgg 更优。由此,gg 的得分为 r=4|r| = 4ss 的其他所有非空子序列的得分均为 00,因此总和为 44

首页