这是AC代码 如果把那行代码换成注释里的 AC→70
你可能觉得是溢出了.但是题目范围5∗1e5∗1e9=5∗1e14<263−1=9.223372036854775807⋅1018 怎么会爆long long?
#include<bits/stdc++.h>
#define s(l) ((sm[n]-sm[l-1]+mod)%mod-sa[l-1]*(Sb[n]-Sb[l-1]+mod)%mod-sb[l-1]*(Sa[n]-Sa[l-1]+mod)%mod+(n-l+1)*sa[l-1]%mod*sb[l-1]%mod+mod)%mod
using namespace std;
typedef long long ll;
const int N=5*1e5+5,mod=1e9+7;
int a[N],b[N];
ll sa[N],sb[N],Sa[N],Sb[N],sm[N];
int n;
ll ans;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) cin>>b[i];
for(int i=1;i<=n;i++)
{
if(i==1) Sa[i]=sa[i]=a[i],Sb[i]=sb[i]=b[i],sm[i]=sa[i]%mod*sb[i]%mod;
else
{
sa[i]=(a[i]+sa[i-1])%mod,sb[i]=(b[i]+sb[i-1])%mod;
//sa[i]=a[i]+sa[i-1],sb[i]=b[i]+sb[i-1];
Sa[i]=(sa[i]+Sa[i-1])%mod,Sb[i]=(sb[i]+Sb[i-1])%mod;
sm[i]=(sm[i-1]+sa[i]*sb[i])%mod;
}
}
for(int l=1;l<=n;l++)
ans=(ans+s(l)+mod)%mod;
cout<<ans;
return 0;
}