首页 > 其他分享 >卡特兰数

卡特兰数

时间:2023-01-15 16:22:05浏览次数:60  
标签:long 卡特兰 向右走 ans 2n binom

卡特兰数:$C(n)=\binom{2n}{n}-\binom{2n}{n+1}=\frac{\binom{2n}{n}}{n+1} $
几何表示:

卡特兰数表示从点O到点A,只能向上或向右走蓝色线段的方案数,即从点O到点A,只能向上或向右走的方案数减去从点O到点A,向上或向右走经过红线的方案数。
从点O到点A,只能向上或向右走的方案数是\(\binom{2n}{n}\)。
从点O到点A,向上或向右走经过红线的方案数是从点O到点B,向上或向右走的方案数是\(\binom{2n}{n+1}\)。
推出卡特兰数:$C(n)=\binom{2n}{n}-\binom{2n}{n+1}=\frac{\binom{2n}{n}}{n+1} $。
例题:
洛谷P3200
思路:
我们会发现当在2位置放m,则\(1~m-1\)的位置就会确定,是依次在奇数位放置,接着放下一个偶数位,也是一样的,就有状态\(f[i][j]\)表示在第i个位置放j的方案数,转移方程\(f[i][j]=\sum_{k=i-2}^{n+\frac{i}{2}} f[i-2][k]\)优化得\(f[i][j]=f[i-2][j-1]+f[i][j-1] (i-1\le j\le n+\frac{i}{2})\) 是卡特兰数。但是p不一定是质数,不能用逆元,可以看每个质因数在其中出现几次,我们可以求出质因数i在\(n!\)中的个数就是$\sum_{k=1}^{\infty} \left \lfloor \frac{n}{i^{k}}\right \rfloor $,那么就可以算了。
代码:

#include<iostream>
using namespace std;
int n,p;
int ss[2000010];
bool prime[2000010];
long long ksm(long long x,long long y){
	if(y==0){
		return 1;
	}
	long long ans=ksm(x,y/2);
	ans=ans*ans%p;
	if(y%2==1){
		ans=ans*x%p;
	}
	return ans;
}
long long ans=1;
int main(){
	cin>>n>>p;
	for(int i=2;i<=2*n;i++){
		if(prime[i]==0){
			long long cnt=0;
			int m=2*n;
			while(m){
				cnt+=m/i;
				m/=i;
			}
			m=n;
			while(m){
				cnt-=m/i;
				m/=i;
			}
			m=n+1;
			while(m){
				cnt-=m/i;
				m/=i;
			}
			ans=ans*ksm(i,cnt)%p;
			ss[++ss[0]]=i;
		}
		for(int j=1;j<=ss[0]&&i*ss[j]<=2*n;j++){
			prime[ss[j]*i]=1;
			if(i%ss[j]==0){
				break;
			}
		}
	}
	cout<<ans;
	return 0;
}

标签:long,卡特兰,向右走,ans,2n,binom
From: https://www.cnblogs.com/z-2-we/p/17053667.html

相关文章

  • 卡特兰数
    一、背景与定义       1.背景       Catalan,Eugene,Charles,卡特兰(1814~1894)比利时数学家,生于布鲁日(Brugge),早年在巴黎综合工科学校就读。1856年任列日(Liege......
  • 卡特兰数(Catalan number)
    Catalan数列目录目录Catalan数列目录定义Number说明表示1.递推定义2.递推关系3.通项公式4.通项公式II证明1.公式42.公式13.公式34.公式2证毕推荐链接定义Numbe......
  • 高斯消元+组合数+卡特兰数
    高斯消元+组合数+卡特兰数高斯消元\(O(n^3)\)的线性时间内求解n元线性方程组\[\\\begin{cases}\a_{11}x_1+a_{12}x_2+...+a_{1n}x_n=b_1\\\a_{21}x_1+a_{22}x_2+.......
  • 【数据结构-栈】卡特兰数
    目录卡特兰数公式出栈序列数二叉树形态数卡特兰数公式f(n)=C(2n,n)/(n+1)计算用途:二叉树形态数,出栈序列数出栈序列数【例1】3个不同元素依次进栈,能得到多少种......
  • 卡特兰数
    具体的讲解和例子参考这篇博客,讲的很清楚在这里主要说下分解成子问题时候的注意事项对于作者提到的2k位置首次出现第一次1的个数等于0的个数的情况,为什么子问题不能分解......
  • 卡特兰数
    我们称一个长度为 2n 的数列是有趣的,当且仅当该数列满足以下三个条件:它是从 1 到 2n 共 2n 个整数的一个排列 {ai};所有的奇数项满足 a1<a3<⋯<a2n−1 ,所有的......
  • 卡特兰数浅析
    背景:之前不熟悉的知识点,所以现在来总结一下概念卡特兰数是一个经常出现在组合数学中的一个数列1,1,2,5,14,42,132,429,1430,4862,...以比利时的数学家欧仁......
  • 卡特兰数入门
    卡特兰数可以解决一些计数问题,还是挺常用的。前几项是\(1,1,2,5,14,42,132,\dots\)下文用\(C_n\)表示卡特兰数第\(n\)项,\(n\)从\(0\)开始。公式如果不记得通项......
  • P1044 [NOIP2003 普及组] 栈 (卡特兰数)
    [NOIP2003普及组]栈题目背景栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表。栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(......
  • 【XSY3726】大猫熊和他的k边形(三角剖分,卡特兰数)
    记录一下两个结论。有标号\(n\)边形的三角剖分数等于\(B_{n-2}\),其中\(B\)是卡特兰数。证明:考虑DP,设\(C_n\)为有标号\(n\)边形的三角剖分数,考虑与\(1\)号......