Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
32329 23级逯一鸣 【S】T1 C++ 解答错误 75 1000 MS 149036 KB 1906 2024-09-08 15:21:59

Tests(15/20):


#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; }


测评信息: