啥都不会啊!怎么办啊!

Fitz

慢慢来生活总会好起来的!!!

求值2 组合数公式题目

链接:https://www.nowcoder.com/acm/contest/114/B
来源:牛客网

题目描述

Ans = 0; 
For(inti = 1; i <= n; i++) 
    For(int v = 0; v <= n; v++) 
        Ans = (Ans + C(i, v) * C(i, v)) % 998244353;
C(i,v)为组合数第i行第v列的数。
给你上面的代码中的n,请你输出Ans的值。

输入描述:

输入一个整数n

输出描述:

输出Ans的值。
示例1

输入

复制
3

输出

复制
28

备注:

n<=106

        这题然后就变成了  求组合数的问题了

  这题需要取模,所以用费马小定理  

       先预处理求出阶乘和  

      (a[i * 2] % mod) * (expmod(a[i] * a[i] % mod, mod - 2) % mod) % mod)  这个就是C(n,2*n)的值

   

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <string>
 4 #include <map>
 5 #include <cstring>
 6 #include <algorithm>
 7 using namespace std;
 8 const int maxn = 2e6 + 10;
 9 const int mod = 998244353;
10 typedef long long LL;
11 LL expmod(LL a, LL b) {
12     LL ret = 1;
13     while(b) {
14         if (b & 1) ret = ret * a % mod;
15         b = b >> 1;
16         a = a * a % mod;
17     }
18     return ret;
19 }
20 LL a[maxn];
21 void init() {
22     a[0] = a[1] = 1;
23     for (int i = 2 ; i < maxn ; i++)
24         a[i] = a[i - 1] * i % mod;
25 }
26 int main() {
27     init();
28     int n;
29     scanf("%d", &n);
30     LL ans = 0;
31     for (int i = 1 ; i <= n ; i++)
32         ans = (ans + (a[i * 2] % mod) * (expmod(a[i] * a[i] % mod, mod - 2) % mod) % mod) % mod;
33     printf("%lld\n", ans);
34     return 0;
35 }

 

posted @ 2018-06-09 13:16  Fitz~  阅读(530)  评论(0编辑  收藏  举报