题目链接 Anton and School - 2

对于序列中的任意一个单括号对(),

左括号左边(不含本身)有a个左括号,右括号右边(不含本身有)b个右括号。

那么答案就为

但是这样枚举左右的()的话,最快情况复杂度为1e10,TLE。
所以对于每个左括号,把他右边的所有右括号一起来考虑。
对于每个左括号,令它左边(不含它本身)括号数位x,它右边右括号数位y。
那么当前答案为
 
 
复杂度O(Nlogmod),其中mod=1e9+7.
PS:代码中的这个y应该是上图的y-1.
 
 #include <bits/stdc++.h>

 using namespace std;

 #define rep(i, a, b)              for(int i(a); i <= (b); ++i)
#define dec(i, a, b) for(int i(a); i >= (b); --i) #define LL long long const int N = + ; const LL mod = ; LL c[N], f[N];
char s[N];
int n;
LL ans = ;
LL fac[]; inline LL Pow(LL a, LL b, LL Mod){ LL ret(); for (; b; b >>= , (a *= a) %= Mod) if (b & ) (ret *= a) %= Mod; return ret;} inline LL C(LL n, LL m){ return m > n ? : fac[n] * Pow(fac[m] * fac[n - m] % mod, mod - , mod) % mod; } int main(){ scanf("%s", s + );
n = strlen(s + ); fac[] = ; rep(i, , ) fac[i] = (fac[i - ] * i) % mod; memset(c, , sizeof c);
memset(f, , sizeof f);
rep(i, , n) if (s[i] == '(') c[i] = c[i - ] + ; else c[i] = c[i - ];
dec(i, n, ) if (s[i] == ')') f[i] = f[i + ] + ; else f[i] = f[i + ]; rep(i, , n) if (s[i] == '('){
LL x = c[i] - , y = f[i + ] - ; (ans += C(x + y + , x + )) %= mod;
} cout << ans << endl;
return ; }
 
 
 

Codeforces 785D Anton and School - 2(推公式+乘法原理+组合数学)的更多相关文章

  1. Codeforces 785D Anton and School - 2 (组合数相关公式+逆元)

    D. Anton and School - 2 time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  2. [刷题]Codeforces 785D - Anton and School - 2

    Description As you probably know, Anton goes to school. One of the school subjects that Anton studie ...

  3. Codeforces 785D - Anton and School - 2 - [范德蒙德恒等式][快速幂+逆元]

    题目链接:https://codeforces.com/problemset/problem/785/D 题解: 首先很好想的,如果我们预处理出每个 "(" 的左边还有 $x$ 个 ...

  4. Codeforces Round #546 (Div. 2) E 推公式 + 线段树

    https://codeforces.com/contest/1136/problem/E 题意 给你一个有n个数字的a数组,一个有n-1个数字的k数组,两种操作: 1.将a[i]+x,假如a[i]+ ...

  5. Codeforces 785D Anton and School - 2(组合数)

    [题目链接] http://codeforces.com/problemset/problem/785/D [题目大意] 给出一个只包含左右括号的串,请你找出这个串中的一些子序列, 要求满足" ...

  6. Codeforces Round #545 (Div. 2) 交互 + 推公式

    https://codeforces.com/contest/1138/problem/F 题意 有一条长为t的链,一个长为c的环,定义终点为链和环相连环上的第一个点,现在有10个人在起点,你每次可以 ...

  7. CodeForces 785D Anton and School - 2

    枚举,容斥原理,范德蒙恒等式. 先预处理每个位置之前有多少个左括号,记为$L[i]$. 每个位置之后有多少个右括号,记为$R[i]$. 然后枚举子序列中第一个右括号的位置,计算这个括号的第一个右括号的 ...

  8. CodeForces 785D Anton and School - 2 (组合数学)

    题意:有一个只有’(‘和’)’的串,可以随意的删除随意多个位置的符号,现在问能构成((((((…((()))))….))))))这种对称的情况有多少种,保证中间对称,左边为’(‘右边为’)’. 析:通 ...

  9. codeforces 185A Plant(推公式)

    Plant [题目链接]Plant [题目类型]推公式 &题解: 这个是可以推公式的: 每年的总个数是4^n个,设n年时向上的个数是x个,向下的个数是y个,那么n+1年时,向上的个数是3* x ...

随机推荐

  1. 80C51单片机指令的取指、执行时序

    80C51单片机指令的取指.执行时序 现按4类指令介绍CPU时序.因为CPU工作的过程就是取指令与执行指令的过程,所以CPU必须先取出指令,然后才能执行指令. 1.双字节单周期指令 由于双字节单周期指 ...

  2. python django 路由系统

    URL配置                        基本格式: from django.conf.urls import url urlpatterns = [ url(正则表达式, views ...

  3. Nodejs-文件系统操作

    1.相关模块 2.同步调用和异步调用 注意:他们的捕获异常的方式不一样 写入文件 语法 以下为异步模式下写入文件的语法格式: fs.writeFile(filename, data[, options ...

  4. leetcode 【 Sort List 】 python 实现

    题目: Sort a linked list in O(n log n) time using constant space complexity. 代码:oj 测试通过 Runtime: 372 m ...

  5. 聊聊、RabbitMQ 第一篇

    (一)windows 下安装配置 开源的消息中间件有很多,各有各的优缺点,适合自己项目的才是最好的.首先下载 rabbitMQ 安装版本,因为 rabbitMQ 底层语言是 erlang,所以首先要先 ...

  6. RESTful-rest_framework视图层-第三篇

    图书管理系统: 实现图书接口的增.删.改.查 方式一:普通的方式 views配置: #Book的增.删.改.查接口 class BookSerializer(serializers.ModelSeri ...

  7. [DM8168]Linux下控制GPIO控制12864液晶屏(ST7565控制器)

    首先加载驱动模块,应用程序通过调用API实现GPIO控制功能. 驱动函数: /* * fileName: st7565_driver.c * just for LCD12864 driver * GP ...

  8. IIS是怎么处理同时到来的多个请求的?

        假设有一台服务器,它的IIS上部署有一个Web应用程序-S,可以通过浏览器或其他方式进行访问.     假设有A.B.C三台电脑同时访问网站S,IIS接收到3个HTTP请求,然后分别为三个请求 ...

  9. wewe

    <#assign base=rc.contextPath /> <#import "spring.ftl" as s /> <!DOCTYPE htm ...

  10. 无序字母对 character

    无序字母对 character 题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入 ...