Codeforces 15E

来源:互联网 发布:广州商学院网络拓扑图 编辑:程序博客网 时间:2024/06/05 09:34

dp[n]表示总共有2*n层的只考虑左边路径总数
然后单边情况下,
d[n]只考虑水平方向那个3*n的奇怪东西的路径总数

#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int N=1e6+10;typedef __int64 LL;const int mod=1e9+9;LL dp[N],d[N];void init(){    int n=1e6;    d[0]=1;    for(int i=1;i<=n;i++){        d[i]=(d[i-1]*2+3)%mod;    }    for(int i=1;i<=n;i++){        d[i]*=d[i-1];d[i]%=mod;    }    dp[2]=2;    for(int i=4;i<=n;i+=2){        dp[i]=(dp[i-2]+d[(i/2-2)]*4)%mod;    }}int main(){    #ifdef DouBi    freopen("in.cpp","r",stdin);    #endif // DouBi    int n;    init();    while(scanf("%d",&n)!=EOF){        LL ans=(dp[n]*dp[n]%mod*2%mod+2)%mod;        printf("%I64d\n",ans);    }    return 0;}
0 0
原创粉丝点击