hdu5184 数论证明
这题说的给了一个整数n 和一串的括号, 那么要我们计算 最后有n/2对括号的 方案数有多少。
我们可以先预先判断一些不可能组成正确括号对的情况,
然后我们可以将这个问题转化到二维平面上, 令 m = n/2 ,L 为左括号的个数 R为右括号的个数 可以知道还有 m - L 个左括号没用, 有m-R个右括号没用,令他们分别我p=m-R,q=m-L, 然后机的就是 (0,0)点到 (p,q)点 不跨过x=y这条线的方案数,那么我们可以这样做,将 (0,0) 向下移动 1 个单位,(0,-1)-》》》》》(p,q-1) , 假设如果非法那么必须会经过(d,d)这个点,我们知道从(0,-1)到(d,d)和(-1,0)到(d,d)的方案数是一样的,那么我们就知道了从(0,1) 出发的非法的方案数为 (-1,0) 到(p.q-1) 的方案数,那么最终的答案就是 C(p+q,q)-C(p+q,q-1);
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
#include <vector>
using namespace std;
const int maxn = +;
typedef long long LL;
const LL mod = ;
LL dp[maxn];
LL mdp[maxn];
LL vdp[maxn];
char str[maxn];
void gcd(LL a, LL b, LL &d, LL &x, LL &y){
if(!b) {d=a; x= ; y =;}
else{gcd(b,a%b,d,y,x); y -= x*(a/b);}
}
LL inv(LL a, LL n){
LL d,x,y;
gcd(a,n,d,x,y);
return d== ? (x+n)%n:-;
}
int main()
{
dp[]=;
for(LL i=; i<=; ++i){
dp[i]=(dp[i-]* i)%mod;
}
int n;
while(scanf("%d",&n)==){
scanf("%s",str); if(n%){
printf("0\n"); continue;
}
LL m = n/;
int len =strlen(str);
LL L=,R=;
for(int i=; i<len; ++i){
if(str[i]=='(') L++;
else if(str[i]==')')R++;
if(L<R){
L=-; break;
}
}
if(L==-||L>m){
printf("0\n");continue;
}
if(L==R&&L+R==n){
printf("1\n");continue;
}
L=m - L;
R=m - R;
LL d0 = L;
L=R; R=d0;
LL d1 = inv(L+,mod); LL d2 = inv(dp[L],mod);
LL d3 = inv(dp[R],mod); LL ans =( ( ( ( ( ( ( ( L-R+ )*d1 )%mod) * d2 )%mod) * d3)%mod) * dp[L+R])%mod;
printf("%I64d\n",ans);
} return ;
}
hdu5184 数论证明的更多相关文章
- Codeforces Round #586 (Div. 1 + Div. 2)D(二分图构建,思维,结论需数论证明)
#include<bits/stdc++.h>using namespace std;long long a[200007];vector<int>v[77];int main ...
- noip做题记录+挑战一句话题解?
因为灵巧实在太弱辽不得不做点noip续下命QQAQQQ 2018 积木大赛/铺设道路 傻逼原题? 然后傻逼的我居然检查了半天是不是有陷阱最后花了差不多一个小时才做掉我做过的原题...真的傻逼了我:( ...
- 幸运的袋子(深度优先遍历(Depth First Search,DFS))
题目描述 一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的).如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积. 例如:如果袋子里面的球的号码是{1, 1, 2 ...
- harukaの赛前日常
REMEMBER US. haruka是可爱的孩子. 如题,此博客用来记录我停课后的日常. Dear Diary 10.8 上午考试. T1,直接枚举每一个点最后一次被修改的情况.(100pts) T ...
- [自用]数论和组合计数类数学相关(定理&证明&板子)
0 写在前面 本文受 NaVi_Awson 的启发,甚至一些地方直接引用,在此说明. 1 数论 1.0 gcd 1.0.0 gcd $gcd(a,b) = gcd(b,a\;mod\;b)$ 证明:设 ...
- [总结]数论和组合计数类数学相关(定理&证明&板子)
0 写在前面 0.0 前言 由于我太菜了,导致一些东西一学就忘,特开此文来记录下最让我头痛的数学相关问题. 一些引用的文字都注释了原文链接,若侵犯了您的权益,敬请告知:若文章中出现错误,也烦请告知. ...
- $\mathcal{OI}$生涯中的各种数论算法的证明
嗯,写这个是因为我太弱了\(ORZ\). #\(\mathcal{\color{silver}{1 \ \ Linear \ \ Sieve \ \ Method \ \ of \ \ Prime}} ...
- 数论的欧拉定理证明 & 欧拉函数公式(转载)
欧拉函数 :欧拉函数是数论中很重要的一个函数,欧拉函数是指:对于一个正整数 n ,小于 n 且和 n 互质的正整数(包括 1)的个数,记作 φ(n) . 完全余数集合:定义小于 n 且和 n 互质的数 ...
- 关于数论分块里r=sum/(sum/l)的证明!
今天的模拟赛里T2要使用到数论分块,里面有一个重要的坎就是关于r=sum/(sum/l)的证明,网上关于这道题的题解里都没有关于这个的证明,那么我就来填补一下: 在以下的文章里,我都会使用lo(x)表 ...
随机推荐
- ASP代码审计学习笔记-1.SQL注入
ASP注入漏洞 一.SQL注入的原因 按照参数形式:数字型/字符型/搜索型 1.数字型sql查询 sql注入原因: ID=49 这类注入的参数是数字型,SQL语句原貌大致如下: id=request. ...
- 上传绕过WAF的tips大全
原始默认状态: ——WebKitFormBoundary2smpsxFB3D0KbA7D Content-Disposition: form-data; name=”filepath”; filena ...
- 设置MySQL的字符编码
前言 这里我已经将MySQL的数据库编码设置为UTF-8,所以下面现实的都是UTF-8. 设置MySQL数据库的编码方式有三种,分别是基于session会话的.基于全局gloable的.永久性改变的. ...
- MQTT协议笔记之mqtt.io项目Websocket协议支持
前言 MQTT协议专注于网络.资源受限环境,建立之初不曾考虑WEB环境,倒也正常.虽然如此,但不代表它不适合HTML5环境. HTML5 Websocket是建立在TCP基础上的双通道通信,和TCP通 ...
- jQuery中的ajax用法案例
什么是 AJAX? AJAX = 异步 JavaScript 和 XML(Asynchronous JavaScript and XML). 简短地说,在不重载整个网页的情况下,AJAX 通过后台加载 ...
- c# 数据库数据与DataGridView表控件的绑定
public Form1() { InitializeComponent(); //连接数据库 string str = "Data Source=IP;Initial Catalog=数据 ...
- shell批量重命令文件脚本
批量重命名脚步记录,以备用 假如有一批11.txt 12.txt 13,txt 14.txt 15.txt脚步要要重命名为1.txt 2.txt 3.txt .... 脚本如下: #!/bin/bas ...
- awk中的冒泡排序
算法中经典的排序方式,今也用awk来实现下,代码如下: BEGIN { count=} {arrary[count]=$ count++ } END{ ;i>-;i--) { ;j<i;j ...
- OneThink友情链接插件使用!
OneThink友情链接插件使用: 直接安装插件就好,查看数据库会有:onethink_links 这个表: 写 links 标签,调用友情链接: <?php namespace Common\ ...
- 【MySQL】为什么不要问我DB极限QPS/TPS
为什么不要问我DB极限QPS/TPS 背景 相信很多开发都会有这个疑问,DB到底可以支撑多大的业务量,如何去评估?对于这个很专业的问题,DBA也没有办法直接告诉你,更多的都是靠经验提供一个看似靠谱的结 ...