提交时间:2024-09-15 20:53:30

运行 ID: 32644

#include<bits/stdc++.h> #define rf(i,a,b) for(int i=(a);i<=(b);i++) #define rb(i,a,b) for(int i=(a);i>=(b);i--) #define ll long long using namespace std; const int N=1e3+10,V=310; int mod=998244353; int n,v; ll f[2][N][V];bool c[N]; int fac[N*5],inv[N*5]; int invp[V*6][V*3]; int C[N][N]; int qp(int a,int b){ int x=1; while(b){ if(b&1) x=1ll*a*x%mod;b>>=1;a=1ll*a*a%mod; }return x; }int lim=4e3+10; inline int cal(int up,int down){ return 1ll*fac[down]*inv[up]%mod*inv[down-up]%mod; }struct nd{ int id,sm,vl; }; int main(){ fac[0]=1;rf(i,1,lim) fac[i]=1ll*fac[i-1]*i%mod; inv[lim]=qp(fac[lim],mod-2);rb(i,lim-1,0) inv[i]=1ll*inv[i+1]*(i+1)%mod; rf(i,1,1050) invp[i][0]=1,invp[i][1]=1ll*inv[i]*fac[i-1]%mod; rf(j,2,350) rf(i,1,1050) invp[i][j]=1ll*invp[i][j-1]*invp[i][1]%mod; rf(i,0,405) rf(j,i,405) C[i][j]=cal(i,j); cin>>v>>n; ll ans=0; f[0][0][v]=fac[n]; int fl=0;//rf(i,1,n+2) fg[i]=v;rf(i,2,n+2) fg[i]=min(fg[i],n/(i-1)); rf(i,1,n+2){ ans+=f[fl][n][0]*(i-2); //cout<<ans<<endl; fl=1-fl; memset(f[fl],0,sizeof(f[fl])); rf(j,0,min(i*v,n)){ int fg=v;if(i!=1) fg=j/(i-1);fg=min(fg,v); rf(k,1,fg){ //cout<<i*k-k<<endl; //cout<<i-1<<' '<<j<<' '<<k<<' '<<f[1-fl][j][k]<<endl; f[1-fl][j][k]%=mod;//min(min(n-j,k),(t)/i) int fh=min(min(n-j,k),(i==1)?n/i:j/(i-1)); rf(t,0,fh){ //cout<<invp[k+1][t]<<' '<<t<<' '<<k<<endl; f[fl][j+t][t]+=f[1-fl][j][k]*C[t][k]%mod*invp[i][t]%mod; //cout<<p.id+1<<' '<<p.sm+i<<' '<<i<<endl; } } } }cout<<ans%mod; return 0; }