码迷,mamicode.com
首页 > 其他好文 > 详细

Wannafly挑战赛17 B

时间:2018-06-09 20:30:14      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:wan   line   std   sum   long   lld   #define   algorithm   play   

题解

大概就是求证这个
\[\sum_i^nC_{n}^i*C_n^i = C_{2n}^n\]
证明:
\[(1+x)^{2n} = [C(0,n)+C(1,n)*x+...+C(n,n)*x^n]*[[C(0,n)+C(1,n)*x+...+C(n,n)*x^n]]\]
\[=...+[C(0,n)*C(n,n)+C(n-1,n)+...+C(n,n)*C(0,n)]x^n+...\]
也就是说,在\((1+x)^{2n}\)的展开式中,\(x^n\)的系数是
\[\sum_k^nC(k,n)*C(n-k) = \sum_k^nC(k,n)^2\]
根据二项式定理
\[(1+x)^{2n}=\sum_k^{2n}[C(k,2n)]*x^k\]\(x^k\)的系数为C(n,2n),由此可得\(\sum_k^nC(k,n)^2 = C(n,2n)\)

代码

#include<cstdio>
#include<algorithm>
#define LL long long
#define mod 998244353
 LL inv(LL x,int y) {
    LL ret = 1;
    for(;y;y >>= 1,x = x * x % mod)
           if(y & 1) ret = ret * x % mod;
    return ret;    
}
const int maxn = 1000007;
LL jc[maxn * 2];
LL C(int a,int b)  {
    return ((((jc[a] * inv(jc[b],mod - 2)% mod) + mod) % mod)
        * inv(jc[a - b],mod - 2) + mod) % mod;
}
int main() {
    jc[0] = jc[1] = 1;
    int n;
    scanf("%d",&n);
    for(int i = 2;i <= 2 * n;++ i)
        jc[i] = jc[i - 1] * i % mod;
    LL ans = 0;
    for(int i = 1;i <= n;++ i)
        ans = (ans + C(2 * i,i)) % mod;
    printf("%lld\n",ans);
    return 0;
}

Wannafly挑战赛17 B

标签:wan   line   std   sum   long   lld   #define   algorithm   play   

原文地址:https://www.cnblogs.com/sssy/p/9160602.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!