[卡特兰数] 51Nod 1120 机器人走方格 V3
2016-11-17 07:46
423 查看
卡特兰数×2
卡特兰数 C(2n,n)-C(2n,n-1)
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int P=10007;
int fac[P+5],inv[P+5];
inline void Pre(){
fac[0]=1;
for (int i=1;i<P;i++) fac[i]=fac[i-1]*i%P;
inv[1]=1;
for (int i=2;i<P;i++) inv[i]=(P-P/i)*inv[P%i]%P;
inv[0]=1;
for (int i=1;i<P;i++) inv[i]=inv[i-1]*inv[i]%P;
}
inline int c(int n,int m){
if (n<m) return 0;
return fac
*inv[m]%P*inv[n-m]%P;
}
inline int C(int n,int m){
int ret=1;
while (n || m)
ret=ret*c(n%P,m%P)%P,n/=P,m/=P;
return ret;
}
int main(){
int n; Pre();
scanf("%d",&n); n--;
printf("%d\n",(C(n<<1,n)+P-C(n<<1,n-1))%P*2%P);
return 0;
}
卡特兰数 C(2n,n)-C(2n,n-1)
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int P=10007;
int fac[P+5],inv[P+5];
inline void Pre(){
fac[0]=1;
for (int i=1;i<P;i++) fac[i]=fac[i-1]*i%P;
inv[1]=1;
for (int i=2;i<P;i++) inv[i]=(P-P/i)*inv[P%i]%P;
inv[0]=1;
for (int i=1;i<P;i++) inv[i]=inv[i-1]*inv[i]%P;
}
inline int c(int n,int m){
if (n<m) return 0;
return fac
*inv[m]%P*inv[n-m]%P;
}
inline int C(int n,int m){
int ret=1;
while (n || m)
ret=ret*c(n%P,m%P)%P,n/=P,m/=P;
return ret;
}
int main(){
int n; Pre();
scanf("%d",&n); n--;
printf("%d\n",(C(n<<1,n)+P-C(n<<1,n-1))%P*2%P);
return 0;
}
相关文章推荐
- 51nod 1120 机器人走方格V3(组合数学+卡特兰数+Lucas)
- 51nod 1120 机器人走方格 V3(卡特兰数,lucas定理)
- 51nod 1120 机器人走方格V3【卡特兰数】【卢卡斯定理】
- 51nod 1120 机器人走方格 V3 【卡特兰数+卢卡斯定理+组合数】
- 51nod 1120 机器人走方格V3 卡特兰数+卢卡斯定理
- 51nod 1120:机器人走方格 V3
- 51nod 1120 机器人走方格 V3
- 51Nod-1120-机器人走方格 V3
- 51nod 1120 机器人走方格v3
- 51NOD 1120 机器人走方格 V3(卢卡斯定理 + 非降路径)
- [51nod-1120]机器人走方格V3 题解
- 51nod 1120 机器人走方格 V3
- 1120 机器人走方格 V3
- 1120 机器人走方格 V3
- 51nod 1120 机器人走方格 V3 卡特兰数 lucas定理
- 51nod 1120 机器人走方格 V3 lucas+卡特兰+逆原 好题
- 【51 Nod】 1120 机器人走方格 V3
- 1120 机器人走方格 V3
- 51nod 机器人走方格 V3
- 51nod 1119 机器人走方格 V2 (求组合数__模板)