90 pts求调
查看原帖
90 pts求调
1112264
YZZCDS楼主2025/7/24 18:41

rt

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

inline ll read() {
	ll f = 1, x = 0;
	char ch = getchar();
	while (ch < '0' || ch > '9') {
		if (ch == '-') f = -1;
		ch = getchar();
	}
	while (ch >= '0' && ch <= '9') {
		x = x * 10 + ch - '0';
		ch = getchar();
	}
	return x * f;
}

inline void write(ll x) {
	if (x < 0) x = -x, putchar('-');
	if (x > 9) write(x/10);
	putchar('0'+x%10);
}

inline void writeln(ll x) {
	write(x);
	putchar('\n');
}

const ll mod = 1e9+7;

ll n, ans;
ll a[500005], b[500005], A[500005], B[500005], F[500005], Fa[500005], Fb[500005];

int main() {
	n = read();
	for (int i = 1; i <= n; i ++) a[i] = (read())%mod, A[i] = (A[i-1] + a[i])%mod;
	for (int i = 1; i <= n; i ++) b[i] = (read())%mod, B[i] = (B[i-1] + b[i])%mod;
	for (int i = 1; i <= n; i ++) {
		F[i] = (F[i-1] + (A[i]*B[i])%mod)%mod;
		Fa[i] = (Fa[i-1] + A[i])%mod;
		Fb[i] = (Fb[i-1] + B[i])%mod;
	}
	for (int i = 1; i <= n; i ++) {
		ans += F[n] - F[i-1] - (A[i-1]*((Fb[n]-Fb[i-1])%mod))%mod - (B[i-1]*((Fa[n]-Fa[i-1])%mod))%mod + ((n-i+1)%mod*(A[i-1]*B[i-1]%mod))%mod;
		ans += mod;
		ans %= mod;
	}
	write(ans);
	return 0;
}
2025/7/24 18:41
加载中...