[组合] Codeforces #575H. Bots

来源:互联网 发布:鲁迅体 知乎 编辑:程序博客网 时间:2024/06/05 14:09

题意即求

i=0nj=0n(i+ji)=i=0n(i+n+1i+1)=(2n+2n+1)1

竖列的组合数的和,可以通过多凑一项,不断用 (i1j1)+(i1j)=(ij) 消掉。

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=3000005,MOD=1e9+7;typedef long long LL;int n,m,ans;LL fac[maxn],inv[maxn],fac_inv[maxn];LL C(int n,int m){ return fac[n]*fac_inv[m]%MOD*fac_inv[n-m]%MOD; }int main(){    fac[0]=1; for(int i=1;i<=3000000;i++) fac[i]=fac[i-1]*i%MOD;    inv[1]=1; for(int i=2;i<=3000000;i++) inv[i]=(LL)(MOD-MOD/i)*inv[MOD%i]%MOD;    fac_inv[0]=1; for(int i=1;i<=3000000;i++) fac_inv[i]=fac_inv[i-1]*inv[i]%MOD;    scanf("%d",&n);    ans=(C(2*n+2,n+1)-1)%MOD;    printf("%d\n",(ans+MOD)%MOD);    return 0;}
原创粉丝点击