P5686 [CSP-S2019 江西] 和积和
#include <cstdio> #include <iostream> #define N 500010 #define ll long long using namespace std; const int mod = 1e9 + 7; int n; ll a[N], b[N], sa[N], sb[N], qz[N], qza[N], qzb[N]; ll read() { ll s = 0, f = 0; char ch = getchar(); while (!isdigit(ch)) f |= (ch == '-'), ch = getchar(); while (isdigit(ch)) s = s * 10 + (ch ^ 48), ch = getchar(); return f ? -s : s; } int main() { n = read(); for (int i = 1; i <= n; i++) a[i] = read(), sa[i] = (sa[i - 1] + a[i]) % mod; for (int i = 1; i <= n; i++) b[i] = read(), sb[i] = (sb[i - 1] + b[i]) % mod; for (int i = 1; i <= n; i++) { qza[i] = (qza[i - 1] + sa[i]) % mod; qzb[i] = (qzb[i - 1] + sb[i]) % mod; qz[i] = (sa[i] * sb[i] % mod + qz[i - 1]) % mod; } ll ans = 0; for (int i = 1; i <= n; i++) { ll sf = (qz[n] - qz[i - 1] + mod) % mod; ll sy = ((qzb[n] - qzb[i - 1] + mod) % mod * sa[i - 1]) % mod; ll sq = ((qza[n] - qza[i - 1] + mod) % mod * sb[i - 1]) % mod; ll sp = ((n - i + 1) * ((sa[i - 1] * sb[i - 1]) % mod)) % mod; ans = (ans + sf - sy - sq + sp + mod) % mod; } cout << ans; }