题目传送门(内部题82)


输入格式

  一行一个字符串$ss$,保证$ss$中只包含$'('$和$')'$。


输出格式

  一行一个整数,表示满足要求的子序列数对$10^9+7$的结果。


样例

样例输入1:

)(()()

样例输出1:

6

样例输入2:

()()()

样例输出2:

7

样例输入3:

)))

样例输出3:

0


数据范围与提示

样例解释:

  第一组样例中,有以下几种子序列满足条件(字符串下标从$1$计数):
  删除$1,5$位置的字符,得到$(())$
  删除$1,2,3,4$位置的字符,得到$()$
  删除$1,2,4,5$位置的字符,得到$()$
  删除$1,2,5,6$位置的字符,得到$()$
  删除$1,3,4,5$位置的字符,得到$()$
  删除$1,3,5,6$位置的字符,得到$()$

数据范围:

  设$n$为$ss$长度
  对于$20\%$的数据,$n\leqslant 20$
  对于$50\%$的数据,$n\leqslant 2,000$
  对于$100\%$的数据,$n\leqslant 200,000$


题解

可以从左到右枚举左右括号的分界点,但是显然会算重,考虑容斥?

其实有更简单的做法,直接要求旁边的左(右)括号必须选就好了。

然后就有了$n^2$的做法。

但是如果你做过这道题:排列组合,那就简单多了。

时间复杂度:$\Theta(n)$。

期望得分:$100$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
const int mod=1000000007;
int n;
char ch[200001];
int l[200001],r[200001];
long long fac[200001],inv[200001];
long long ans;
long long qpow(long long x,long long y)
{
long long res=1;
while(y)
{
if(y&1)res=res*x%mod;
x=x*x%mod;
y>>=1;
}
return res;
}
void pre_work()
{
fac[0]=1;
for(int i=1;i<=200000;i++)
fac[i]=fac[i-1]*i%mod;
inv[200000]=qpow(fac[200000],mod-2);
for(int i=200000;i;i--)
inv[i-1]=inv[i]*i%mod;
}
long long C(long long x,long long y)
{
if(x<y)return 0;
return fac[x]*inv[y]%mod*inv[x-y]%mod;
}
int main()
{
pre_work();
scanf("%s",ch+1);
n=strlen(ch+1);
for(int i=1;i<=n;i++)l[i]=l[i-1]+(ch[i]=='(');
for(int i=n;i;i--)r[i]=r[i+1]+(ch[i]==')');
for(int i=1;i<=n;i++)
if(ch[i]=='(')
ans=(ans+C(l[i-1]+r[i+1],r[i+1]-1))%mod;
printf("%lld",ans);
return 0;
}

rp++

[CSP-S模拟测试]:简单的括号序列(组合数)的更多相关文章

  1. csps模拟83最大异或和简单的括号序列旅行计划题解

    题面:https://www.cnblogs.com/Juve/articles/11733280.html 最大异或和: 简单博弈,小Q一定不会输,如果异或和为0,则平局,因为无论小Q如何拿,小T都 ...

  2. [CSP-S模拟测试]:简单的序列(DP)

    题目描述 从前有个括号序列$s$,满足$|s|=m$.你需要统计括号序列对$(p,q)$的数量. 其中$(p,q)$满足$|p|+|s|+|q|=n$,且$p+s+q$是一个合法的括号序列. 输入格式 ...

  3. [CSP-S模拟测试]:简单的填数(贪心+模拟)

    题目描述 对于一个长度为$n$,且下标从$1$开始编号的序列$a$,我们定义它是「合法的」,当且仅当它满足以下条件:·$a_1=1$·对于$i\in [1,n),a_i\leqslant a_{i+1 ...

  4. [CSP-S模拟测试]:简单的区间(分治)

    题目描述 给定一个长度为$n$的序列$a$以及常数$k$,序列从$1$开始编号.记$$f(l,t)=\sum \limits_{i=l}^ra_i-\max \limits_{i=l}^r\{a_i\ ...

  5. csp-s模拟测试52平均数,序列题解

    题面:https://www.cnblogs.com/Juve/articles/11602244.html 平均数: 第k个平均数不好求,我们考虑二分,转化成平均数小于x的有几个 虑把序列中的每个数 ...

  6. [CSP-S模拟测试]:简单计算(数学)

    题目传送门(内部题104) 输入格式 第一行一个正整数$T$,表示该测试点内的数据组数,你需要对该测试点内的$T$组数据都分别给出正确的答案才能获得该测试点的分数. 接下来$T$组数据,每组数据一行两 ...

  7. [CSP-S模拟测试]:简单的操作(二分图+图的直径)

    题目描述 从前有个包含$n$个点,$m$条边,无自环和重边的无向图. 对于两个没有直接连边的点$u,v$,你可以将它们合并.具体来说,你可以删除$u,v$及所有以它们作为端点的边,然后加入一个新点$x ...

  8. [CSP-S模拟测试]:简单的期望(DP)

    题目描述 从前有个变量$x$,它的初始值已给出. 你会依次执行$n$次操作,每次操作有$p\%$的概率令$x=x\times 2$,$(100−p)\%$的概率令$x=x+1$. 假设最后得到的值为$ ...

  9. [CSP-S模拟测试]:简单的玄学(数学)

    题目描述 有$m$个在$[0,2^n)$内均匀随机取值的整型变量,球至少有两个变量取值相同的概率.为了避免精度误差,假设你的答案可以表示成$\frac{a}{b}$的形式,(其中$(a,b)=1$), ...

随机推荐

  1. 为什么只有ip地址和端口号需要主机字节序到网络字节序的转换?

    答复是:因为内容是二进制流,不是整数. 整数(int.uint16.uint32)的表达,是需要多字节的,在不同cpu上,字节次序是不同的.因此,从A主机到B主机,如果是异构的,就需要做字节调整.同构 ...

  2. 异步任务报错-Celery: WorkerLostError: Worker exited prematurely: signal 9 (SIGKILL)

    现象: 异步任务: 测试环境正常,线上环境报错 使用celery 进行后端异步任务时,报错: Celery: WorkerLostError: Worker exited prematurely: s ...

  3. ubuntu下python3虚拟环境的配置

    安装相关包 sudo pip3 install virtualenv # 虚拟环境包 sudo pip3 install virtualenvwrapper # 虚拟环境管理包 创建虚拟环境目录 su ...

  4. 3.学习Dispatcher

    3.学习Dispatcher 不管是WinForm应用程序还是WPF应用程序,实际上都是一个进程,一个进程可以包含多个线程,其中有一个是主线程,其余的是子线程. 在WPF或WinForm应用程序中,主 ...

  5. Jquery复习(二)之stop()易忘点

    jQuery stop() 方法 jQuery stop() 方法用于停止动画或效果,在它们完成之前. stop() 方法适用于所有 jQuery 效果函数,包括滑动.淡入淡出和自定义动画. 语法:$ ...

  6. 剑指offer 数字翻译成字符串

    0 -> 'a', 1->'b', ..., 11 -> 'l', ..., 25->'z'. 计算一个数有多少种不同的翻译方法. 分析:记f[i]表示从第i位起的不同翻译数目 ...

  7. luogu P4076 [SDOI2016]墙上的句子

    luogu loj 题意看了我半天(逃 (应该是我语文太差了) 题意是要确定每一行和每一列的看单词的顺序,使得同时正着出现和反着出现在里面的单词数量最少,每行和每列的性质是这一行所有单词反过来的单词要 ...

  8. SQL注入的一些技巧分享

    先上一道简单的ctf注入题: 一道利用order by进行注入的ctf题 很不错的一道利用order by的注入题,之前不知道order by除了爆字段还有这种操作. 原题地址:http://chal ...

  9. div悬浮在屏幕的中间及点击按钮关闭弹出框

    #fd { position: fixed; z-index: 999; width: 109px; height: 323px; top: 71%; right: 1%; margin: -50px ...

  10. 2019-11-29-Roslyn-通过-Nuget-管理公司配置

    title author date CreateTime categories Roslyn 通过 Nuget 管理公司配置 lindexi 2019-11-29 08:58:52 +0800 201 ...