不难想到考虑每个点的贡献,ans=n*sigema(1~n)i C(n-1,i)*(2^C(n-1,2))*i^k
直接套第二类斯特林拆柿子即可。提示:sigema(1~n)i C(n,i)*C(i,j) = C(n,j)*2^(n-j)
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; typedef long long LL; const int _=1e2; const int maxK=2e5+_; const int fbiK=(1<<18)+_; const int mod=998244353; inline int ad(int x,int y){return (x>=mod-y)?(x-mod+y):x+y;} inline int re(int x,int y){return (x<y)?(x-y+mod):x-y;} inline int mu(int x,int y){return (LL)x*y%mod;} inline int qp(int x,int y){int r=1;while(y>0){if(y&1)r=mu(r,x);x=mu(x,x);y/=2;}return r;} int fac[maxK],fac_inv[maxK],inv[maxK]; void yu(int K) { fac[0]=1;for(int i=1;i<=K;i++)fac[i]=mu(fac[i-1],i); fac_inv[K]=qp(fac[K],mod-2); for(int i=K-1;i>=0;i--)fac_inv[i]=mu(fac_inv[i+1],i+1); inv[1]=1;for(int i=2;i<=K;i++)inv[i]=mu(inv[mod%i],mod-mod/i); } namespace GETS2 { int Re[2*fbiK]; void NTT(int *a,int n,int op) { for(int i=0;i<n;i++) if(i<Re[i])swap(a[i],a[Re[i]]); for(int i=1;i<n;i<<=1) { int gn=qp(3,(mod-1)/(i<<1)); if(op==-1)gn=qp(gn,mod-2); for(int j=0;j<n;j+=(i<<1)) { int g=1; for(int k=0;k<i;k++,g=mu(g,gn)) { int k1=a[j+k],k2=mu(a[j+k+i],g); a[j+k]=ad(k1,k2); a[j+k+i]=re(k1,k2); } } } if(op==-1) { int inv=qp(n,mod-2); for(int i=0;i<n;i++)a[i]=mu(a[i],inv); } } int n,m,L,A[2*fbiK],B[2*fbiK],S2K[2*fbiK]; void main(int K) { m=2*K-1;for(n=1;n<=m;n<<=1)L++; for(int i=0;i<n;i++)Re[i]=(Re[i>>1]>>1)|((i&1)<<(L-1)); for(int i=0;i<=K;i++) { A[i]=mu((i&1)?mod-1:1,fac_inv[i]); B[i]=mu(qp(i,K),fac_inv[i]); } NTT(A,n,1),NTT(B,n,1); for(int i=0;i<n;i++)S2K[i]=mu(A[i],B[i]); NTT(S2K,n,-1); } } int S2[1100][1100]; void QWQ() { S2[0][0]=1; for(int i=1;i<=100;i++) for(int j=1;j<=i;j++) S2[i][j]=ad(S2[i-1][j-1],mu(S2[i-1][j],j)); } int main() { int n,K; scanf("%d%d",&n,&K);yu(K); GETS2::main(K);//QWQ(); using namespace GETS2; int ans=0,C=1; for(int j=1;j<=K;j++) { C=mu(mu(C,n-j),inv[j]); ans=ad(ans, mu( mu(S2K[j],fac[j]) , mu(C,qp(2,n-1-j)) ) ); } printf("%d ", mu( mu(ans,n) , qp(2,(LL)(n-1)*(n-2)/2%(mod-1)) ) ); return 0; }