Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
32282 | 22fhq | 【S】T1 | C++ | 运行出错 | 90 | 132 MS | 6268 KB | 1581 | 2024-09-08 14:11:24 |
#include<bits/stdc++.h> using namespace std; #define int long long int n,m,k,a[100005],b[100005],sa[100005],sb[100005]; int cntsa[100005],cntsb[100005],cnta[100005],cntb[100005]; vector<int>y; const int mod=998244353; void getans(int x){ for(int i=1;i<=n;i++)cntsa[i]=0; for(int i=1;i<=m;i++)cntsb[i]=0; cntsa[0]=cntsb[0]=1; for(int i=1;i<=n;i++){ if(sa[i]>=x){ cnta[x]+=cntsa[sa[i]-x]; } cntsa[sa[i]]++; } for(int i=1;i<=m;i++){ if(sb[i]>=x){ cntb[x]+=cntsb[sb[i]-x]; } cntsb[sb[i]]++; } cnta[x]%=mod; cntb[x]%=mod; return; } void read(int &x){ x=0; char c=getchar(); while(!isdigit(c))c=getchar(); while(isdigit(c))x=x*10+c-'0',c=getchar(); return; } signed main(){ read(n),read(m),read(k); for(int i=1;i<=n;i++){ read(a[i]); sa[i]=sa[i-1]+a[i]; } for(int i=1;i<=m;i++){ read(b[i]); sb[i]=sb[i-1]+b[i]; } for(int i=1;i*i<=k;i++){ if(k%i==0){ // cout<<i<<endl; y.push_back(i); if(i*i!=k){ // cout<<k/i<<endl; y.push_back(k/i); } } } // cout<<y.size(); sort(y.begin(),y.end()); for(int x:y){ getans(x); } int ans=0; for(int x:y){ // cout<<x<<" "<<cnta[x]<<" "<<cntb[k/x]<<endl; ans+=cnta[x]*cntb[k/x]; ans%=mod; } cout<<ans<<endl; return 0; }