记录编号 270020 评测结果 AAAAAAAAAA
题目名称 [HZOI 2015]疯狂的求和问题 最终得分 100
用户昵称 Gravatarstdafx.h 是否通过 通过
代码语言 C++ 运行时间 1.104 s
提交时间 2016-06-14 11:45:48 内存使用 7.92 MiB
显示代码纯文本
#define maxn 500010ul

#include <stdio.h>

int n,k,s1,P[maxn],invf[maxn],fac[maxn],inv[maxn]; const int mod=998244353;

void read(register int &x){
	x=0; register int c=getchar(); for(;c<'0'||c>'9';c=getchar());
	for(;c>='0'&&c<='9';c=getchar()) x=((x*10ll)+(c^48ll))%mod; return;
}

int power(int p,int k){
	if(p==-1){ if(k&1) return -1; else return 1; }
	int ret=1;
	while(k){
		if(k&1) ret=1ll*ret*p%mod;
		k>>=1,p=1ll*p*p%mod;
	} return ret;
}

int main(){
	freopen("Crazy_Sum.in","r",stdin);
	freopen("Crazy_Sum.out","w",stdout);
    read(n),read(k),n++,k++; fac[0]=inv[0]=inv[1]=invf[0]=1;
    for(int i=1;i<=k;i++) fac[i]=1ll*fac[i-1]*i%mod;
    for(int i=2;i<=k;i++) inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
    for(int i=1;i<=k;i++) invf[i]=1ll*invf[i-1]*inv[i]%mod;
    for(int i=2;i<=k;i++) P[i]=(power(i-1,k-1)+P[i-1])%mod;
    if(n<=k) return printf("%d\n",P[n]),0;
    s1=n; for(int i=1;i<=k;i++) s1=1ll*s1*(n-i)%mod;
    int ans=0;
    for(int j=0;j<=k;j++) (ans+=1ll*power(-1,k-j)*P[j]%mod*s1%mod*invf[k-j]%mod*invf[j]%mod*power(n-j,mod-2)%mod)%=mod;
    printf("%d\n",(ans%mod+mod)%mod); return 0;
}