Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
33767 LYLAKIOIAKIOI 【S】T2 C++ 通过 100 18 MS 3760 KB 1789 2024-10-22 14:58:24

Tests(10/10):


#include<bits/stdc++.h> #define fi first #define se second using namespace std; const int mod=998244353,N=1050; map<int,int> q; int to[N*2],tt[N],tp=0; int L[N],R[N]; int len[N*2]; int plu(int a,int b){ a+=b;if(a>=mod) a-=mod;return a; }int mult(int a,int b){ a=1ll*a*b%mod;return a; } int f[N*2][N],n; int fac[N],inv[N];int lim=N-10; int C(int u,int d){ if(u>d) return 0; int res=1; for(int i=0;i<u;i++){ res=mult(res,d-i); }return mult(res,inv[u]); }int qp(int a,int b){ int x=1; while(b){ if(b&1) x=1ll*x*a%mod; b>>=1;a=1ll*a*a%mod; }return x; } int bim[N*2][N]; int main(){ fac[0]=1;for(int i=1;i<=lim;i++) fac[i]=1ll*fac[i-1]*i%mod; inv[lim]=qp(fac[lim],mod-2);for(int i=lim-1;i>=0;i--) inv[i]=1ll*inv[i+1]*(i+1)%mod; cin>>n;for(int i=1;i<=n;i++) cin>>L[n+1-i]>>R[n+1-i]; f[0][0]=1; for(int i=1;i<=n;i++) q[L[i]]=1,q[R[i]]=1,q[L[i]+1]=1,q[R[i]+1]=1; for(auto &it:q) it.se=++tp,to[tp]=it.fi; for(int i=1;i<tp;i++) len[i]=to[i+1]-to[i]; for(int i=1;i<tp;i++){ for(int j=1;j<=n;j++){ bim[i][j]=C(j,len[i]-1+j); } } for(int i=1;i<tp;i++){ //cout<<len[i]<<endl; f[i][0]=f[i-1][0]; for(int j=1;j<=n;j++){ f[i][j]=plu(f[i][j],f[i-1][j]); for(int k=j;k>=1;k--){ int lc=q[L[k]],rc=q[R[k]]; //cout<<lc<<' '<<rc<<' '<<k<<endl; if(i<lc||i>rc) break; f[i][j]=plu(f[i][j],mult(f[i-1][k-1],/*C(j-k+1,len[i]+j-k)*/bim[i][j-k+1])); //cout<<i<<' '<<j<<' '<<f[i][j]<<endl; }//cout<<i<<' '<<j<<' '<<f[i][j]<<endl; } }int ans=0; cout<<f[tp-1][n]; return 0; }


测评信息: