Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
32329 | 23级逯一鸣 | 【S】T1 | C++ | 解答错误 | 75 | 1000 MS | 149036 KB | 1906 | 2024-09-08 15:21:59 |
#include <algorithm> #include <cstdio> #include <unordered_map> #include <utility> using namespace std; constexpr int N = 1e5, M = 1e5, MOD = 998244353; int n, m, k; int A[N + 5], B[M + 5]; unordered_map<int, int> cnt_A, cnt_B; 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 (const auto& cnt : cnt_A) { if (cnt.second > 0 || cnt_A.find(cnt.first + a) != cnt_A.end()) l = (l + mul(cnt.second, cnt_A[cnt.first + a])) % MOD; } for (const auto& cnt : cnt_B) { if (cnt.second > 0 && cnt_B.find(cnt.first + b) != cnt_B.end()) r = (r + mul(cnt.second, cnt_B[cnt.first + b])) % MOD; } cnt = (cnt + mul(l, r)) % MOD; if (a != b) { swap(a, b); l = r = 0; for (const auto& cnt : cnt_A) { if (cnt.second > 0 || cnt_A.find(cnt.first + a) != cnt_A.end()) l = (l + mul(cnt.second, cnt_A[cnt.first + a])) % MOD; } for (const auto& cnt : cnt_B) { if (cnt.second > 0 && cnt_B.find(cnt.first + b) != cnt_B.end()) r = (r + mul(cnt.second, cnt_B[cnt.first + b])) % MOD; } cnt = (cnt + mul(l, r)) % MOD; swap(a, b); } } printf("%d\n", cnt); return 0; }