AcWing 889. 满足条件的01序列(卡特兰数)
题目连接
https://www.acwing.com/problem/content/891/
思路
因为有n个1和n个0,那么最后一定能走到点(n,n),我们正面去想不太好想,所以我们可以看看中间出现1的数量比0多的情况,对于这个放法我们可以化成一个平面图,1表示向右走一步,0表示向上走一步,那么对于我们现在要求的反面就是要经过y=x+1y=x+1y=x+1这一条线的方案数,我们可以对这条线做(n,n)的一个对称图形也就是(n-1,n+1),我们会发现这个一个位置的方案数为:C2nn−1C_{2n}^{n-1}C2nn−1,对于走到(n,n)的所有方案数为:C2nnC_{2n}^{n}C2nn,那么我们直接做一个差就好啦,化简后就是:
C2nnn+1\frac{C_{2n}^{n}}{n+1}n+1C2nn这个数也被称为卡特兰数
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007ll ksm(ll a,ll b){ll res = 1;for(;b;b>>=1,a=a*a%mod) if(b & 1) res = res * a % mod;return res;
}ll C(ll a,ll b){b = min(a-b,b);ll ansL = 1,ansR = 1;for(int i = 1;i <= b; ++i){ansL = ansL * (a-i+1) % mod;ansR = ansR * i % mod;}ll ans = ansL * ksm(ansR,mod-2) % mod;return ans;
}ll slove(ll n){return (C(2*n,n)-C(2*n,n-1) + mod) % mod;
}int main()
{ll a;scanf("%lld",&a);printf("%lld\n",slove(a));return 0;}
AcWing 889. 满足条件的01序列(卡特兰数)相关推荐
- 【算法专题】卡特兰数
卡特兰数 1. 概述 卡特兰数:首先这个一个数,很多问题的结果都是卡特兰数,比如2016年全国三卷数学选择题压轴题让求解的就是卡特兰数,问题如下: 首先是结论:卡特兰数为: C 2 n n n + 1 ...
- 卡特兰数(高精度乘法压位)
889. 满足条件的01序列 题目 提交记录 讨论 题解 视频讲解 给定 n 个 0 和 n 个 1,它们将按照某种顺序排成长度为 2n 的序列,求它们能排列成的所有序列中,能够满足任意前缀序列中 0 ...
- Catalan数——卡特兰数
今天阿里淘宝笔试中碰到两道组合数学题,感觉非常亲切,但是笔试中失踪推导不出来 后来查了下,原来是Catalan数.悲剧啊,现在整理一下 Catalan数--卡特兰数] 一.Catalan数的定义令h( ...
- 程序员数学--卡特兰数(Catalan number)
10个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问有多少种排列方式? 我们可以先把这10个人从低到高排列,然后,选择5个人排在第一排,那么剩下的5个人肯定是在第二 ...
- 卡特兰数Catalan
1.卡特兰数的性质 其实重要的就两个公式:1和3. 公式1是卡特兰数的通项公式. 公式2是卡特兰数的递归公式.注意递推公式是C n+1=- 通常是发现问题可以用卡特兰数的递推公式来解决,从而想到卡特兰 ...
- 2017百度之星程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】...
度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...
- Bailian4077 出栈序列统计【卡特兰数】(vijos P1122)
问题链接:vijos P1122 出栈序列统计. 出栈序列统计 总时间限制: 100ms 内存限制: 64kB 描述 栈是常用的一种数据结构,有n个元素在栈顶端一侧等待进栈,栈顶端另一侧是出栈序列.你 ...
- 线段树分裂与合并 ----- P2824 [HEOI2016/TJOI2016]排序 [线段树分裂合并 OR 01序列排序+二分线段树]
题目链接 题目大意: 对一个序列,每次按照升序或者降序排序序列某一段,问你最后的序列是什么? 解法1:二分+线段树 首先我们知道对一个01序列进行排序是很快的!我们只要知道里面有多少个1和多少个0,那 ...
- 1.4编程基础之逻辑表达式与条件分支 01判断数正负
http://noi.openjudge.cn/ch0104/01/ /* 1.4编程基础之逻辑表达式与条件分支 01判断数正负 http://noi.openjudge.cn/ch0104/01/ ...
最新文章
- 人脸识别是大势所趋 加速落地“普惠AI”
- Linux运维之批量下载指定网站的100个图片文件,并找出大于200KB的文件
- 每个软件工程师都应该尝试的5件事
- 官宣!极客邦科技获2000万元 A 轮融资,全面发力知识服务平台
- 如何在ASP.NET Core中使用SignalR构建与Angular通信的实时通信应用程序
- vue router 跳转php,vue路由:路由跳转后怎么知道切换到那个router-view中
- ping命令linux软件包,linux下安装 ping 命令
- uniapp 移动端上传文件_基于 uniapp 实现动态路由和动态 Tabbar
- 计算机标准化管理制度,计算机中心标准化管理.doc
- Vuex源码阅读分析
- CSS content 属性 CSS counter-increment 属性 CSS counter-reset 属性
- python下载离线包
- Crystal Reports - Add Subreport
- Unity3d Network 局域网多人对战之游戏大厅
- idea格式化代码时,注释被格式化问题
- spring5、springboot和springcloud的区别
- Qt 实现 别踩白块儿。
- 解决conda install pkgs found conflict问题
- 如何在 Mac 上更改鼠标光标颜色?
- please insert the disc labeled ‘Ubuntu 18.04.5 LTS _Bionic Beaver_ - Release amd64 (20200806.1)‘ in
热门文章
- mac上c++11的编译问题
- QObject: Cannot create children for a parent that is in a different thread.
- Latex 图像总是出现在目标页的下一页置顶
- ComBox、listBox、checklistBox控件
- JSP三大指令、七大动作、九大对象
- Android ViewPager+TabHost实现首页导航
- 查看MySQL数据库大小
- 在linux下安装iNode校园客户端
- Intellij IDEA 14.x 菜单项中Compile、Make和Build的区别
- opencart china 书籍主题