Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
33783 baka24 【S】T2 C++ 通过 100 1 MS 1140 KB 1878 2024-10-22 15:18:50

Tests(10/10):


//100 #include<bits/stdc++.h> using namespace std; #define int long long #define lson (pos<<1) #define rson (pos<<1|1) const int MAXN=510,MAXM=1000010,Mod=998244353,inf=1000000000; int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c<='9'&&c>='0')x=x*10+c-'0',c=getchar();return x*f;} int Pow(int x,int y){int rt=1;while(y){if(y&1)rt=rt*x%Mod;x=x*x%Mod;y>>=1;}return rt;} int n,m,mx,mn,l[MAXN],r[MAXN],p[MAXN],ny[MAXN],f[MAXN][MAXN]; map<int,int>mp; int c[MAXN][MAXN]; int C(int x,int y){ int res=1; for(int i=x;i>x-y;i--)res=res*i%Mod; for(int i=2;i<=y;i++)res=res*ny[i]%Mod; return res; } void slv(){ n=read(); mn=inf; r[0]=inf; ny[0]=1; for(int i=1;i<=n;i++)l[i]=read(),r[i]=read(),ny[i]=Pow(i,Mod-2); for(int i=1;i<=n;i++)r[i]=min(r[i],r[i-1]); for(int i=n;i>=1;i--)l[i]=max(l[i],l[i+1]); for(int i=1;i<=n;i++)p[i]=l[i]-1,p[i+n]=r[i]; sort(p+1,p+2*n+1); m=unique(p+1,p+2*n+1)-p-1; for(int i=1;i<=m;i++)mp[p[i]]=i; for(int i=1;i<=n;i++)l[i]=mp[l[i]-1],r[i]=mp[r[i]]; for(int i=m;i>=1;i--)p[i]-=p[i-1]; for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++)c[i][j]=C(p[i]-1+j,j); } for(int i=1;i<=m+1;i++)f[0][i]=1; for(int i=1;i<=n;i++){ for(int k=0;k<i;k++){ for(int j=l[k+1]+1;j<=r[i];j++){ f[i][j]+=f[k][j+1]*c[j][i-k]%Mod; f[i][j]%=Mod; // for(int o=j+1;o<=m+1;o++){ // f[i][j]+=(f[k][o]*c[j][i-k])%Mod; // f[i][j]%=Mod; // } } } for(int j=m;j>=0;j--)f[i][j]+=f[i][j+1],f[i][j]%=Mod; } int ans=0; for(int i=l[n]+1;i<=r[n];i++)ans+=f[n][i]-f[n][i+1],ans%=Mod; printf("%lld",ans); } signed main(){ slv(); return 0; }


测评信息: