列表

详情


NC16543. 求值2

描述

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

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++11(clang++ 3.9) 解法, 执行用时: 37ms, 内存消耗: 24040K, 提交时间: 2018-06-08 20:09:47

#include<bits/stdc++.h>
using namespace std;
long long fac[2000010];
long long inv[1000010];
const long long mod=998244353;
int main(){
	fac[0]=1;
	for(int i=1;i<=2000000;i++)fac[i]=fac[i-1]*i%mod;
	inv[1000000]=490058372;
	for(int i=1000000;i>1;i--)inv[i-1]=inv[i]*i%mod;
	long long ans=0;
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)ans=(ans+fac[i*2]*inv[i]%mod*inv[i]%mod)%mod;
	cout<<ans<<endl;
}

C++14(g++5.4) 解法, 执行用时: 331ms, 内存消耗: 13292K, 提交时间: 2018-06-11 10:52:09

#include<stdio.h>
#define MD 998244353
int INV(int x)
{
    return x==1?x:1LL*(MD-MD/x)*INV(MD%x)%MD;
}
int f[2234567],ans[2234567],t,n;
int main()
{
    f[1]=1;
    for(int i=2;i<2234567;i++)f[i]=f[i-1]*1LL*i%MD;
    for(int i=1;i<1034567;i++)t=INV(f[i]),ans[i]=(ans[i-1]+f[2*i]*1LL*t%MD*t%MD)%MD;
    scanf("%d",&n),printf("%d",ans[n]);
    return 0;
}

上一题