hdoj-4828-Grids

来源:互联网 发布:cors网络账号怎么获取 编辑:程序博客网 时间:2024/06/16 06:23

Description

  度度熊最近很喜欢玩游戏。这一天他在纸上画了一个2行N列的长方形格子。他想把1到2N这些数依次放进去,但是为了使格子看起来优美,他想找到使每行每列都递增的方案。不过画了很久,他发现方案数实在是太多了。度度熊想知道,有多少种放数字的方法能满足上面的条件?

Input

  第一行为数据组数T(1<=T<=100000)。
  然后T行,每行为一个数N(1<=N<=1000000)表示长方形的大小。

Output

  对于每组数据,输出符合题意的方案数。由于数字可能非常大,你只需要把最后的结果对1000000007取模即可。

Sample Input

213

Sample Output

Case #1:1Case #2:5          

Hint

对于第二组样例,共5种方案,具体方案为:


卡特兰树,然后求逆元一下就OK


#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long ll;const int mod=1000000007;const int maxn=1000005;ll f[maxn];ll pow1(ll n,ll m){    ll ans = 1;    while(m)    {        if(m & 1) ans = ans * n % mod;        m = m >> 1;        n = n * n % mod;    }    return ans;}int main(){    f[0] = 1;    f[1] = 1;    for(int i = 2; i <= 1000000; i++)    {        f[i] = ((f[i-1]*(4*i-2)%mod)*pow1(i+1 ,mod-2)) % mod;    }    int t;    scanf("%d",&t);    int Cas=1;    while(t--)    {        int n;        scanf("%d",&n);        printf("Case #%d:\n",Cas++);        printf("%I64d\n",f[n]);    }    return 0;}


0 0
原创粉丝点击