注释部分是我原汁原味的代码 下面是我按照题解把公式和变量名搬过来的 我不知道为什么我写的就不行
// Problem:
// P5686 [CSP-S2019 江西] 和积和
//
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P5686
// Memory Limit: 125 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include<iostream>
#include<algorithm>
//#include<cstdio>
#define ll long long
#define endl '\n'
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define N 500100 //1e6+100
#define MOD 1000000007
#define int long long
using namespace std;
int n;
int a[N],b[N];
int sa[N],sb[N],ss[N],qza[N],qzb[N],qz[N];
int s1,s2,s3,s4,s;
signed main(){
//ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
//cin>>n;
// rep(i,1,n) cin>>a[i];
// rep(i,1,n) cin>>b[i];
// rep(i,1,n){
// a[i]+=a[i-1];
// b[i]+=b[i-1];
// a[i]%=MOD;
// b[i]%=MOD;
// sa[i]=a[i]+sa[i-1];
// sb[i]=b[i]+sb[i-1];
// sa[i]%=MOD;
// sb[i]%=MOD;
// ss[i]=((sa[i]*sb[i]%MOD)+ss[i-1])%MOD;
// }
// rep(i,1,n){
// s1=(ss[n]-ss[i-1]+MOD)%MOD;
// s2=((sa[n]-sa[i-1]+MOD)%MOD * b[i-1])%MOD;
// s3=((sb[n]-sb[i-1]+MOD)%MOD * a[i-1])%MOD;
// s4=((n-i+1)*((a[i-1]*b[i-1])%MOD))%MOD;
//
// s+=(s1-s2-s3+s4+MOD);
// s%=MOD;
// }
// cout<<s;
/*
计算x*y=(a[j]-a[i-1])*(b[j]-b[i-1])
=a[j]*b[j]-a[j]*b[i-1]-a[i-1]b[j]+a[i-1]b[i-1];
分开求每一个值
*/
cin>>n;
rep(i,1,n) cin>>sa[i];
rep(i,1,n) cin>>sb[i];
rep(i,1,n){
sa[i]+=sa[i-1];
sb[i]+=sb[i-1];
sa[i]%=MOD;
sb[i]%=MOD;
qza[i]=sa[i]+qza[i-1];
qzb[i]=sb[i]+qzb[i-1];
qza[i]%=MOD;
qzb[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;
return 0;
}