提交时间:2024-09-08 12:40:08

运行 ID: 32229

#include<bits/stdc++.h> #define int long long using namespace std; const int maxn=1e5+7; const int mod=998244353; int a[maxn]; int b[maxn]; int c[57][57]; int s[57][57]; int S(int i1,int j1,int i2,int j2){ return s[i2][j2]-s[i1-1][j2]-s[i2][j1-1]+s[i1-1][j1-1]; } int n,m,k; void sub8(){ for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)c[i][j]=a[i]*b[j]; for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+c[i][j]; int ans=0; for(int i1=1;i1<=n;i1++){ for(int j1=1;j1<=m;j1++){ for(int i2=i1;i2<=n;i2++){ for(int j2=j1;j2<=m;j2++){ if(S(i1,j1,i2,j2)==k)ans++,ans%=mod; } } } } cout<<ans<<endl; } int pA[maxn]; int c1; int pB[maxn]; int c2; int L[maxn]; int R[maxn]; int P[maxn]; int Q[maxn]; int Ro[maxn]; int Co[maxn]; void sub14(){ for(int i=1;i<=n;i++)if(a[i])pA[++c1]=i; pA[++c1]=n; for(int i=1;i<=m;i++)if(b[i])pB[++c2]=i; pB[++c2]=m; for(int i=1;i<=c1;i++)L[i]=pA[i]-pA[i-1]; for(int i=1;i<=c1;i++){ if(i==1)R[i]=L[i]-1; else if(i==c1)R[i]=L[i]+1; else R[i]=L[i]; } for(int i=1;i<=c2;i++)P[i]=pB[i]-pB[i-1]; for(int i=1;i<=c2;i++){ if(i==1)Q[i]=P[i]-1; else if(i==c2)Q[i]=P[i]+1; else Q[i]=P[i]; } for(int d=1;d<c1;d++){ if(k%d!=0)continue; for(int i=1;i<=c1-d;i++)Ro[d]=(Ro[d]+L[i]*R[i+d]%mod)%mod; } for(int d=1;d<c2;d++){ if(k%d!=0)continue; for(int i=1;i<=c2-d;i++)Co[d]=(Co[d]+P[i]*Q[i+d]%mod)%mod; } int ans=0; for(int d=1;d*d<=k;d++){ if(k%d==0){ if(d<=c1&&k/d<=c2)ans=(ans+Ro[d]*Co[k/d]%mod)%mod; if(d*d!=k){ if(d<=c2&&k/d<=c1)ans=(ans+Ro[k/d]*Co[d]%mod)%mod; } } } cout<<ans<<endl; } signed main(){ freopen("rain.in","r",stdin); freopen("rain.out","w",stdout); cin>>n>>m>>k; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<=m;i++)cin>>b[i]; // if(n<=50&&m<=50)sub8(); sub14(); }