小猫

有 2n只小猫站成一圈,主人小明想把它们两两之间用绳子绑住尾巴连在一起。同时小明是个完美主义者,不容许看到有两根绳子交叉。请问小明有几种连线方案,可以把让所有小猫两两配对?
方案数很大,仅需输出方案数模 1000000007 (一个质数)的值。
输入输出格式
输入格式:
输入一个整数 nn
输出格式:
输出方案数对 1000000007 取模的值
输入输出样例
输入样例#13
输出样例#15
说明
数据范围
对于60%的数据 N≤100
对于100%的数据 N≤100000
题目描述

经观察可得,这是卡特兰数

但是数据太大,又让取模,所以要用到逆元

then,

 1 #include<bits/stdc++.h> 
 2 #define ll long long
 3 using namespace std;
 4 const ll mod=1e9+7;
 5 ll n;
 6 ll h[1000000];
 7 ll ksm(ll x,ll y)
 8 {
 9     ll ans=1;
10     while(y)
11     {
12         if(y&1) ans=ans*x%mod;
13         y>>=1;
14         x=x*x%mod;
15     }
16     return ans%mod;
17 }
18 int main()
19 {
20     scanf("%d",&n);
21     h[1]=1;
22     for(ll i=2;i<=n;++i)
23 //     h[i]=h[i-1]*(4*i-2)/(i+1);
24      h[i]=h[i-1]*(4*i-2)%mod*ksm(i+1,mod-2)%mod;
25     printf("%lld",h[n]);
26     return 0;
27 }
代码

猜你喜欢

转载自www.cnblogs.com/adelalove/p/9184723.html