newcoder contest 114 B - 求值2

   记得这是一个组合数卷积的板子题。

    ∑ C(A,i) * C(B,D-i)   =  C(A+B,D)

    然后就直接做了。

#include<cstdio>
#include<cctype>
#include<algorithm>
#define ll long long
using namespace std;
const int maxn=2000000,ha=998244353;

inline void ADD(int &x,int y){ x+=y; if(x>=ha) x-=ha;}

inline int ksm(int x,int y){
	int an=1;
	for(;y;y>>=1,x=x*(ll)x%ha) if(y&1) an=an*(ll)x%ha;
	return an;
}

int jc[maxn+5],ni[maxn+5];
int n,T,ans;

inline void init(){
	jc[0]=1;
	for(int i=1;i<=maxn;i++) jc[i]=jc[i-1]*(ll)i%ha;
	ni[maxn]=ksm(jc[maxn],ha-2);
	for(int i=maxn;i;i--) ni[i-1]=ni[i]*(ll)i%ha;
}

inline int C(int x,int y){ return jc[x]*(ll)ni[y]%ha*(ll)ni[x-y]%ha;}

int main(){
	scanf("%d",&n);
	init();
	
	for(int i=1;i<=n;i++) ADD(ans,C(i<<1,i));
	
	printf("%d\n",ans);
	return 0;
}

  

猜你喜欢

转载自www.cnblogs.com/JYYHH/p/9160655.html
114