括号序列

ky981630 程序题 共 个子题

题目描述

对于字符串 $S$ 与 $T$,如果从 $S$ 中删除任意多个字符可以得到 $T$,那么 $T$ 是 $S$ 的子序列。换言之,$T$ 是选取 $S$ 中的若干字符按下标顺序连接而成的。两个子序列不同当且仅当所选取的下标不同。

例如 sun 是 sequence 的子序列,因为从 sequence 中删除 eq、e 和 ce 可以得到 sun;sequence 有 $2^8$ 个不同的子序列,其中有空字符串,也有三个不同的子序列 e,因为 sequence 的第 2,5,8 个字符都为 e,分别保留这三个字符得到的子序列是不同的。

对于字符串 $S$,如果 $S$ 满足以下条件那么 $S$ 是合法括号序列:

  • $S$ 是空字符串,或者
  • $S$ 可由(、合法括号序列、)三者连接得到,或者
  • $S$ 可由两个合法括号序列连接得到。

例如 ()、()()、(()) 和 (()()) 都是合法括号序列。但是 (()、)( 不是合法括号序列。

给定一个长度为 $n$ 的仅包含(与)的字符串 $S$。请你求出 $S$ 所有 $2^n$ 个子序列中有多少个合法括号序列。由于答案可能很大,请你输出答案对 $10^9$ 取模的结果。

例如,$S$ 为 ))(()( 时共有 $3$ 个子序列是合法括号序列,分别为空字符串与两个不同的子序列 ()。

输入格式

第一行,一个正整数 $n$,表示字符串 $S$ 的长度。

第二行,长度为 $n$ 的仅包含(与)的字符串 $S$。

输出格式

输出一行,一个整数,表示 $S$ 的合法括号子序列的数量对 $10^9$ 取模的结果。

输入样例 1

6
))(()(

输出样例 1

3

输入样例 2

34
((((((((((((((((()))))))))))))))))

输出样例 2

333606220

数据范围

对于 40% 的测试点,保证 $1 \le n \le 400$。

对于所有测试点,保证 $1 \le n \le 2000$。

本题为编程题,提交代码并运行通过测试点后判分。

正在加载题目数据…
已答 /
子题
该题型需在试卷/作业中作答,单题练习暂不支持
答案解析
提交记录
共 条 仅展示自由练习提交
正在加载提交记录…
讨论
发布
登录后参与讨论 立即登录
发布讨论需先绑定并验证手机号 去绑定手机号
加载中…
我
我
回复 @
回复 @
发送
还没有人讨论,来发表第一条吧