附上BC的官方题解:

当n为奇数的时候答案是0。
先判断字符串的前面是否符合括号匹配,即对于任何前缀左括号个数>=右括号个数。
设左括号个数为a右括号个数为b, m=n/2,问题可以转化为在平面中从座标(a,b)沿网格走到(m,m) 且不跨过x=y这一条直线的方法数。数据太大,普通DP和搜索都不行的。
问题可以进一步转化为从(a-n,b-n)到(0,0)且不跨过x=y的方法数。再对称一下,转化到(0,0)到(n-b,n-a)不跨过x=y的方法数。对于从(0,0)点走到(p,q)点不跨过x=y的方法数是
p−q+1p+1Cqp+q
证明如下:
我们可以通过总的数目来减掉非法的数目即可。
把(0,0)和(p,q)都往下移一格,非法数目即为(0,-1)到(p,q-1)且路径中至少有一点和x=y相交的方法数。记(d,d)为从(0,-1)到(p,q-1)路径中最先和x=y相交的点。则由于对称性(-1,0)到(d,d)的方法数和(0,-1)到(d,d)的方法数是相同的。所以(0,-1)到(p,q-1)且与x=y相交的方法数和(-1,0)到(p,q-1)的方法数是相同的。
所以答案是
Cqp+q−Cq−1p+q=p−q+1p+1Cqp+q
然后对100W以内的数字进行一个阶乘处理,就可以O(1)得出答案了。
#include <iostream>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <bitset>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <climits>
#include <cstdlib>
#include <cmath>
#include <time.h>
#define maxn 1000005
#define maxm 100005
#define eps 1e-7
#define mod 1000000007
#define INF 0x3f3f3f3f
#define PI (acos(-1.0))
#define lowbit(x) (x&(-x))
#define mp make_pair
#define ls o<<1
#define rs o<<1 | 1
#define lson o<<1, L, mid
#define rson o<<1 | 1, mid+1, R
#define pii pair<int, int>
#pragma comment(linker, "/STACK:16777216")
typedef long long LL;
typedef unsigned long long ULL;
//typedef int LL;
using namespace std;
LL qpow(LL a, LL b){LL res=1,base=a;while(b){if(b%2)res=res*base;base=base*base;b/=2;}return res;}
LL powmod(LL a, LL b){LL res=1,base=a;while(b){if(b%2)res=res*base%mod;base=base*base%mod;b/=2;}return res;}
//headLL f[maxn];
LL g[maxn];
char s[maxn];
int n;void init()
{f[0] = 1;for(int i = 1; i <= 1000000; i++) f[i] = f[i-1] * i % mod;g[1000000] = powmod(f[1000000], mod - 2);for(int i = 999999; i >= 0; i--) g[i] = g[i+1] * (i+1) % mod;
}inline LL calc(int a, int b)
{return f[a+b] * (b + 1 - a) % mod * g[a] % mod * g[b+1] % mod;
}void work()
{if(n % 2) {printf("0\n");return;}int a = 0, b = 0, ok = 1;for(int i = 0; s[i]; i++) {if(s[i] == '(') a++;else b++;if(b > a) ok = 0;}if(!ok) {printf("0\n");return;}n /= 2;a = n - a;b = n - b;if(a < 0 || b < 0) {printf("0\n");return;}printf("%I64d\n", calc(a, b));
}int main()
{init();while(scanf("%d%s", &n, s)!=EOF) work();return 0;
}

【组合数学】 HDOJ 5184 Brackets相关推荐

  1. HDOJ 5184 Brackets 卡特兰数扩展

    既求从点(0,0)仅仅能向上或者向右而且不穿越y=x到达点(a,b)有多少总走法... 有公式: C(a+b,min(a,b))-C(a+b,min(a,b)-1)  /// 折纸法证明卡特兰数: h ...

  2. 卡特兰数 相关问题 hdu 5184 Brackets

    题解: 当n为奇数的时候答案是0. 先判断字符串的前面是否符合括号匹配,即对于任何前缀左括号个数>=右括号个数. 设左括号个数为a右括号个数为b, m=n/2,问题可以转化为在平面中从座标(a, ...

  3. BestCoder Round #32

    问题描述 目前,我们用PM2.5的含量来描述空气质量的好坏.一个城市的PM2.5含量越低,它的空气质量就越好.所以我们经常按照PM2.5的含量从小到大对城市排序.一些时候某个城市的排名可能上升,但是他 ...

  4. 【HDU 5184】 Brackets (卡特兰数)

    Brackets Problem Description We give the following inductive definition of a "regular brackets& ...

  5. 【HDOJ】1261 字串数【组合数学--排列+代数】

    传送门:字串数 题意: sum(A1,A2,...,An)的阶乘/(A1!)/(A2!)/.../(An!) 因为数字可能很大,所以要用到大数类,Java的大数用起来比较爽,就用Java写了. 好不容 ...

  6. HDOJ ACM 题目

    转载 HDOJ 题目分类(转) 1001 整数求和 水题 1002 C语言实验题--两个数比较 水题 1003 1.2.3.4.5... 简单题 1004 渊子赛马 排序+贪心的方法归并 1005 H ...

  7. (区间dp 或 记忆化搜素 )Brackets -- POJ -- 2955

    http://poj.org/problem?id=2955 Description We give the following inductive definition of a "reg ...

  8. 不畏浮云遮望眼--离散数学和组合数学

    不畏浮云遮望眼,基础很重要! 离散数学是算法和数据结构的基础,而算法和数据结构又是什么的基础?不解释了. 1.<离散数学及其应用> 作者: (美)Kenneth H. R 出版社: 机械工 ...

  9. 并查集 HDOJ 1232 畅通工程

    题目传送门 1 /* 2 并查集(Union-Find)裸题 3 并查集三个函数:初始化Init,寻找根节点Find,连通Union 4 考察:连通边数问题 5 */ 6 #include <c ...

最新文章

  1. access百度翻译 get_百度AI攻略:智能上色
  2. excel总行数 java_计算Excel工作表列中的行数(提供的Java代码)
  3. 鸿蒙os内测版应用名称,鸿蒙OS2.0发布,只有两款机型可以申请内测
  4. 电子工程可以报考二建_电子科学与技术专业能报考二级建造师吗?
  5. oracle 合并重复数据_三天三夜整理出来的数据库常见的面试题,让你直接拿走...
  6. 突破php的imagecopyresampled 和imagecopyresized 实现图片马JPG
  7. BZOJ 1717 [Usaco2006 Dec]Milk Patterns 产奶的模式(后缀数组)
  8. ios 计算两个时间相差秒数_Ios中时间差的计算,NSData与NSCalendar(日历)对象
  9. 服务器系统日志6008,DELL服务器宕机事件6008
  10. commit git idea 速度慢_关于Idea使用git时commit特别慢的问题及解决方法
  11. 初学者python笔记(静态属性、类方法、静态方法、类的组合)
  12. 递增子序列 Increasing Subsequences
  13. dom4j 中文api
  14. docker安装mysql并配置文件_Docker安装mysql,并自定义my.cnf
  15. T3500通过PXE克隆报“Unable to Control A20 Line XMS Driver not installed”
  16. Android 网易云IM开发
  17. 山东理工oj答案java_山东理工大学ACM程序设计竞赛-山东理工ACM主页.DOC
  18. 如何判断网站被黑?网站被黑如何应对?如何防止网站被黑?
  19. s8 android调用相机,android-扎根的Galaxy S8上的设备所有者
  20. 【算法•日更•第十二期】信息奥赛一本通1585:【例 1】Amount of Degrees题解

热门文章

  1. php 圆周率多少位,圆周率1500多位
  2. Excel导入导出加密码保护/加解密(Aspose.Cells方式)
  3. JavaScript购物车小项目
  4. 全球各国网站后缀(域名)
  5. 网页不能复制文字解决方法总结(亲测有效)
  6. RecyclerView瀑布流造成的item错乱
  7. 青年节,这世界有点魔幻
  8. python培训班出来能找到工作吗-参加Python人工智能培训班能找到工作吗?
  9. 快速将图片变成圆角怎么弄?
  10. 如何判断我们的代理ip是高匿