hdu5673(默慈金数、卡特兰数)

原创 2016年06月01日 23:34:23

Robot
Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 337 Accepted Submission(s): 173

Problem Description
There is a robot on the origin point of an axis.Every second, the robot can move right one unit length or do nothing.If the robot is
on the right of origin point,it can also move left one unit length.A route is a series of movement. How many different routes there are
that after n seconds the robot is still located on the origin point?
The answer may be large. Please output the answer modulo 1,000,000,007

Input
There are multiple test cases. The first line of input contains an integer T(1≤T≤100) indicating the number of test cases. For each test case:

The only line contains one integer n(1≤n≤1,000,000).

Output
For each test case, output one integer.

Sample Input

3
1
2
4

Sample Output

1
2
9

#include<cstdio>

typedef long long ll;
const ll mod=1000000007;
const int maxn=1000005;
ll catalan[maxn],inv[maxn],fact[maxn];

ll Pow(ll n,ll m){
    ll sum=1,t=n;
//    printf("%lld %lld\n",n,m);
    while(m){
        if(m&1){
            sum*=t;
            if(sum>=mod)sum%=mod;
        }
        t*=t;
        if(t>=mod)t%=mod;
        m>>=1;
    }
    return sum;
}

ll C(ll n,ll m){
    if(m>n||m<0)return 0;
    return fact[n]*inv[m]%mod*inv[n-m]%mod;
}

int main(){
//    printf("%lld %lld\n",Pow(2,3),Pow(2,0));return 0;
    catalan[0]=1;
    for(int i=1;i<maxn;++i){
        catalan[i]=(catalan[i-1]*(4*i-2)%mod)*Pow(i+1,mod-2)%mod;
    }
    fact[0]=1;
    for(int i=1;i<maxn;++i){
        fact[i]=fact[i-1]*i%mod;
    }
    inv[0]=1;
    for(int i=1;i<maxn;++i){
        inv[i]=Pow(fact[i],mod-2)%mod;
    }

    int T;
    scanf("%d",&T);
    while(T--){
        int n;
        scanf("%d",&n);
        ll ans=0;
        for(int i=0;i<=(n>>1);++i){
            ans=ans+((catalan[i]*C((ll)n,(ll)i<<1))%mod);
            ans%=mod;
        }
        printf("%lld\n",ans);
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

默慈金数

今天,我来讲一种比较特殊的数,可能很多人都没有听过这种数,它叫默慈金数。但事实是它早就已经进入了ACM竞 赛中了。好了,接下来让我们一起来认识它,并会讲述一些它的重要应用。   在百度百科上,是这样定...
  • ACdreamers
  • ACdreamers
  • 2014年11月18日 19:38
  • 3799

HDU-5673-Robot(卡特兰数+逆元 / 默慈金数)

Robot Accepts: 38 Submissions: 146 Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/6...
  • qq978874169
  • qq978874169
  • 2016年04月26日 15:52
  • 415

默慈恩金数

今天,我来讲一种比较特殊的数,可能很多人都没有听过这种数,它叫默慈金数。但事实是它早就已经进入了ACM竞 赛中了。好了,接下来让我们一起来认识它,并会讲述一些它的重要应用。   在百...
  • shiyongyang
  • shiyongyang
  • 2017年09月29日 09:43
  • 38

默慈金数 (hdu3723)

默慈金数 hdu3723 默慈金数 1, 2, 4, 9, 21, 51, 127, 323, 835, 2188, 5798, 15511, 41835, 113634, 310572, 8534...
  • whai362
  • whai362
  • 2015年01月13日 11:19
  • 994

hdu 5673 robot【默慈金数or卡特兰数】

补充知识: 卡特兰数 Catalan(n)=C2nnn+1Catalan(n) = \frac{C_n^{2n}}{n+1} Catalan(n)=4n−2n+1∗Catalan(n−1)Catal...
  • lhfl911
  • lhfl911
  • 2016年04月26日 20:33
  • 384

51nod-1556 计算(默慈金数)

原题链接 1556 计算 基准时间限制:1 秒 空间限制:524288 KB 分值: 80 难度:5级算法题  收藏  关注 有一个1...
  • qq_26122039
  • qq_26122039
  • 2016年08月22日 20:22
  • 110

51nod 1556 计算(默慈金数)

这题要用到默慈金数,又涨知识了。 默慈金数:http://blog.csdn.net/acdreamers/article/details/41213667 题解:http://blog.csdn...
  • gyhguoge01234
  • gyhguoge01234
  • 2017年05月31日 15:12
  • 160

hdoj 5673 Robot 【默慈金数】

题目链接:hdoj 5673 Robot 有一个机器人位于坐标原点上。每秒钟机器人都可以向右移到一个单位距离,或者在原地不动。如果机器人的当前位置在原点右侧,它同样可以 向左移动单位距离。一系列的...
  • chenzhenyu123456
  • chenzhenyu123456
  • 2016年04月24日 18:36
  • 202

HDU5673 Robot DP 默慈金数 线性求1~n逆元 bestcoder

Robot Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Tot...
  • qdbszsj
  • qdbszsj
  • 2016年04月23日 23:07
  • 510

卡特兰数的数学解释和分析

关于卡特兰数,我也是最近才接触到,是在一份笔试的代码题里,题目大致是这样的:    16个人去饼店买饼,其中8个人身上有5块钱,8个人身上有10块钱,饼5块钱一个,老板一开始没有零钱可找,问有多少种...
  • ATM246800
  • ATM246800
  • 2016年09月25日 22:56
  • 1747
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hdu5673(默慈金数、卡特兰数)
举报原因:
原因补充:

(最多只允许输入30个字)