卡特兰数

2022/4/29 23:49:04

本文主要是介绍卡特兰数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

给定 \(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;
}


这篇关于卡特兰数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程