正题
题目链接:https://www.luogu.org/problemnew/show/P1375
题目大意
东西两两绑在一起,要求绳子不能交叉,求方案数。
解题思路
0表示压入第i只猫,1表示弹出栈顶的猫并且和第i只猫绑在一起,这样就能保证不会交叉。
也就是卡特兰数。
codecodecode
#include<cstdio>
#define ll long long
using namespace std;
const int P=1e9+7;
ll n;
ll power(ll x,ll b)
{ll ans=1;while(b){if(b&1) ans=(ans*x)%P;x=(x*x)%P;b>>=1;}return ans;
}
ll C(ll n,ll m)
{ll k1=1,k2=1;for(ll i=n-m+1;i<=n;i++)k1=k1*i%P;for(ll i=1;i<=m;i++)k2=k2*power(i,P-2)%P;return k1*k2%P;
}
int main()
{scanf("%d",&n);ll k=C(2*n,n),z=power(n+1,P-2);printf("%d",k*z%P);
}