提交时间:2024-09-08 15:25:37

运行 ID: 32335

#include <algorithm> #include <cstdio> #include <utility> using namespace std; constexpr int N = 1e5, M = 1e5, MOD = 998244353; int n, m, k; int A[N + 5], B[M + 5], cnt_A[N + 5], cnt_B[M + 5]; inline int mul(int x, int y) { return (long long)x * y % MOD; } int main() { scanf("%d %d %d", &n, &m, &k); cnt_A[0] = cnt_B[0] = 1; for (int i = 1; i <= n; ++i) { scanf("%d", A + i); A[i] += A[i - 1]; ++cnt_A[A[i]]; } for (int i = 1; i <= m; ++i) { scanf("%d", B + i); B[i] += B[i - 1]; ++cnt_B[B[i]]; } int cnt = 0; for (int a = 1; (long long)a * a <= k; ++a) { if (k % a != 0) continue; int b = k / a, l = 0, r = 0; for (int i = 0; i <= n - a; ++i) l = (l + mul(cnt_A[i], cnt_A[i + a])) % MOD; for (int i = 0; i <= m - b; ++i) r = (r + mul(cnt_B[i], cnt_B[i + b])) % MOD; cnt = (cnt + mul(l, r)) % MOD; if (a != b) { swap(a, b); l = r = 0; for (int i = 0; i <= n - a; ++i) l = (l + mul(cnt_A[i], cnt_A[i + a])) % MOD; for (int i = 0; i <= m - b; ++i) r = (r + mul(cnt_B[i], cnt_B[i + b])) % MOD; cnt = (cnt + mul(l, r)) % MOD; swap(a, b); } } printf("%d\n", cnt); return 0; }