CF785D Anton and School - 2

题目描述

你可能知道,Anton 在上学。他学的科目之一是括号学。在括号学的课程中,学生们通常学习由圆括号组成的各种序列(即字符 "(" 与 ")"(不带引号))。 在上一节课上,Anton 学习了“正规简单括号序列”(RSBS)。长度为 $n$ 的括号序列 $s$ 是 RSBS,当且仅当满足以下条件: - 序列非空(即 $n \neq 0$)。 - 序列长度是偶数。 - 序列的开头 $\frac{n}{2}$ 个字符都是 "("。 - 序列的结尾 $\frac{n}{2}$ 个字符都是 ")"。 例如,序列 "((()))" 是 RSBS,但序列 "((())" 和 "(()())" 不是 RSBS。 Anton 的老师 Elena Ivanovna 给了他如下家庭作业。给定一个括号序列 $s$,请找出它的本质不同的子序列中属于 RSBS 的有多少个。注意,$s$ 的一个子序列是指通过删除 $s$ 的某些元素后得到的字符串。如果删除元素的位置集合不同,那么子序列即认为不同。 由于答案可能很大,而 Anton 的老师不喜欢大数,她要求 Anton 将答案对 $10^9+7$ 取模。 Anton 想了很久,但仍然不知道怎么解这道题。请你帮助 Anton 完成这道题,并编写程序输出答案!

输入格式

输入仅一行,为括号序列 $s$,即 Anton 的作业。字符串只包含字符 "(" 和 ")"(不带引号)。保证字符串非空,长度不超过 $200000$。

输出格式

输出一个整数,表示满足条件的本质不同 RSBS 子序列的个数,对 $10^9+7$ 取模。

说明/提示

在第一个样例中,满足条件的子序列有: - 删除第 $1$ 和第 $5$ 个字符(下标从 $1$ 开始),得到 "(())"。 - 删除第 $1,\,2,\,3,\,4$ 个字符,得到 "()"。 - 删除第 $1,\,2,\,4,\,5$ 个字符,得到 "()"。 - 删除第 $1,\,2,\,5,\,6$ 个字符,得到 "()"。 - 删除第 $1,\,3,\,4,\,5$ 个字符,得到 "()"。 - 删除第 $1,\,3,\,5,\,6$ 个字符,得到 "()"。 其余子序列都不是 RSBS。所以共有 $6$ 个本质不同且为 RSBS 的子序列,因此答案为 $6$。 由 ChatGPT 5 翻译