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

卡特兰数

作者:互联网

给定 \(n\) 个 0 和 \(n\) 个 1,它们按照某种顺序排成长度为 \(2n\) 的序列,满足任意前缀中 0 的个数都不少于 1 的个数的序列的数量为:\(Cat(n) = C_{2n}^n - C_{2n}^{n - 1} = \frac{C_{2n}^n}{n + 1}\)

#include <bits/stdc++.h>
using namespace std;
#define LL long long
const int mod = 1e9 + 7;
LL n;
LL qmi(LL a, LL k, LL p){
	LL ans = 1;
	while (k){
		if (k & 1) ans = ans * a % p;
		a = a * a % p;
		k >>= 1;
	}
	return ans;
}
int main(){
	cin >> n;
	LL a = 2 * n, b = n, ans = 1;
	for (int i = a; i > a - b; i -- ) ans = ans * i % mod;
	for (int i = 1; i <= b; i ++ ) ans = ans * qmi(i, mod - 2, mod) % mod;
	ans = ans * qmi(n + 1, mod - 2, mod) % mod;
	cout << ans << "\n";
	return 0;
}

标签:int,LL,long,ans,2n,卡特兰,mod
来源: https://www.cnblogs.com/Hamine/p/16208565.html