Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
32647 | LYLAKIOIAKIOI | 【S】T2 | C++ | 运行超时 | 65 | 1000 MS | 8516 KB | 2056 | 2024-09-15 21:01:25 |
#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; int 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(){ //freopen("caged.in","r",stdin); //freopen("caged.out","w",stdout); 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]*1ll*((i+mod-2)%mod); //cout<<ans<<endl; fl=!fl; memset(f[fl],0,sizeof(f[fl])); int ft=min(i*v,n); rf(j,0,ft){ 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; //min(min(n-j,k),(t)/i) int fh=min(min(n-j,k),(i==1)?n/i:j/(i-1)); ll w=f[!fl][j][k]; rf(t,0,fh){ //cout<<invp[k+1][t]<<' '<<t<<' '<<k<<endl; int &s=f[fl][j+t][t]; s+=w*C[t][k]%mod*invp[i][t]%mod; if(s>=mod)s-=mod; //cout<<p.id+1<<' '<<p.sm+i<<' '<<i<<endl; } } } }cout<<ans%mod; //cerr<<clock()*1000/CLOCKS_PER_SEC<<endl; return 0; }