提交时间:2024-09-08 13:43:19

运行 ID: 32272

#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e5 + 9, Mod = 998244353; int n, m, K, a[N], b[N], f[N], g[N], pos[N], tp; vector<int> fac; signed main() { scanf("%d%d%d", &n, &m, &K); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); } for (int i = 1; i <= m; i++) { scanf("%d", &b[i]); } for (int i = 1; i * i <= K; i++) { if (K % i) continue; fac.push_back(i); if (K / i != i) fac.push_back(K / i); } sort(fac.begin(), fac.end()); for (int i = 1; i <= n; i++) { if (a[i]) pos[++tp] = i; for (int k : fac) { int x = tp - k + 1; if (x <= 0) break; (f[k] += pos[x] - pos[x - 1]) %= Mod; } } tp = 0; for (int i = 1; i <= m; i++) { if (b[i]) pos[++tp] = i; for (int k : fac) { int x = tp - k + 1; if (x <= 0) break; (g[k] += pos[x] - pos[x - 1]) %= Mod; } } int ans = 0; for (int i : fac) { if (i > n || K / i > m) continue; ans = (ans + 1ll * f[i] * g[K / i]) % Mod; } printf("%d\n", ans); return 0; }