51nod 1120 机器人走方格V3 卡特兰数+卢卡斯定理
2017-07-31 12:51
435 查看
点这里
忘了好久的公式。。。终于想起来查
卡特兰数
卡特兰数计算公式C(2n-2,n-1)/n或C(2n,n)-C(2n,n-1)
卢卡斯定理 用于大组合数取模运算
ans=(C(2n-2,n-1)/n)%mod
忘了好久的公式。。。终于想起来查
卡特兰数
卡特兰数计算公式C(2n-2,n-1)/n或C(2n,n)-C(2n,n-1)
卢卡斯定理 用于大组合数取模运算
ans=(C(2n-2,n-1)/n)%mod
#include <iostream> #include <string.h> #include <stdio.h> #include <math.h> using namespace std; typedef long long ll; const int maxn= 10010; const int mod=10007; int f[10020]; void init() { f[0]=1; for(int i=1;i<=maxn;i++) f[i]=(i*f[i-1])%mod; } long long pow1(long long n,long long m ) { long long ans = 1; while(m > 0) { if(m & 1)ans = (ans * n) % mod; m = m >> 1; n = (n * n) % mod;} return ans; } long long lucas(ll n,ll m) { ll ans=1; while(n&&m) { ll x,y; x=n%mod;y=m%mod; if(x<y) return 0; //printf("%lld %lld %d %d %d\n",x,y,f[x],f[y],f[x-y]); ans=ans*f[x]*pow1(f[y]*f[x-y]%mod,mod-2)%mod; n/=mod;m/=mod; } return ans%mod; } int main() { init(); ll n,m,t; //freopen("out.txt","w",stdout); while(~scanf("%lld",&n)) { ll t=pow1(n,mod-2); printf("%lld\n",2*lucas(2*n-2,n-1)*t%mod); } return 0; }
相关文章推荐
- 51nod 1120 机器人走方格 V3 【卡特兰数+卢卡斯定理+组合数】
- 51nod 1120 机器人走方格V3【卡特兰数】【卢卡斯定理】
- 51NOD 1120 机器人走方格 V3(卢卡斯定理 + 非降路径)
- 51nod 1120 机器人走方格 V3(卡特兰数,lucas定理)
- [卡特兰数] 51Nod 1120 机器人走方格 V3
- 51nod 1120 机器人走方格V3(组合数学+卡特兰数+Lucas)
- 51nod 1120 机器人走方格v3
- 51Nod 1120 卡特兰数+卢卡斯定理
- 51nod 1120 机器人走方格 V3 卡特兰数 lucas定理
- 51nod 1120 机器人走方格 V3
- 51Nod-1120-机器人走方格 V3
- 51nod 1120 机器人走方格 V3
- 2017-10-22 51nod 1120 卢卡斯定理 Lucas 组合数取模 卡特兰数
- 51nod 1120:机器人走方格 V3
- [51nod-1120]机器人走方格V3 题解
- 1120 机器人走方格 V3
- 1120 机器人走方格 V3
- 【51 Nod】 1120 机器人走方格 V3
- 51nod 1119 机器人走方格V2 lucas定理
- 51node-1120 机器人走方格(卡特兰数列+Lucas定理)