您的位置:首页 > 其它

洛谷—— P1375 小猫

2017-11-25 20:54 267 查看

https://www.luogu.org/problemnew/show/1375

题目描述

有2n只小猫站成一圈,主人小明想把它们两两之间用绳子绑住尾巴连在一起。同时小明是个完美主义者,不容许看到有两根绳子交叉。请问小明有几种连线方案,可以把让所有小猫两两配对?

方案数很大,仅需输出方案数模1000000007(一个质数)的值。

数据范围:

60% N<=100

100% N<=100000

输入输出格式

输入格式:

 

输入一个整数n

 

输出格式:

 

输出方案数对1000000007取模的值

 

输入输出样例

输入样例#1: 复制
3
输出样例#1: 复制
5


卡特兰数组合公式C(2*n,n)-C(2*n,n-1)
#include <cstdio>

#define LL long long

inline void read(int &x)
{
x=0; register char ch=getchar();
for(; ch>'9'||ch<'0'; ) ch=getchar();
for(; ch>='0'&&ch<='9'; ch=getchar()) x=x*10+ch-'0';
}

const int P(1000000007);

LL fac[500005];

inline LL Pow(LL a,LL b)
{
LL ret=1;
for(; b; b>>=1,a*=a,a%=P)
if(b&1) ret*=a,ret%=P;
return (int)ret;
}

LL C(LL n,LL m)
{
return fac
*Pow(fac[m],P-2)%P*Pow(fac[n-m],P-2)%P;
}

int Presist()
{
int n; read(n); fac[0]=1;
for(int i=1; i<=n<<1; ++i) fac[i]=1ll*fac[i-1]*i%P;
printf("%lld\n",(C(n<<1,n)-C(n<<1,n-1)+P)%P);
return 0;
}

int Aptal=Presist();
int main(int argc,char**argv){;}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: