40分求助(就过了前四个点)
查看原帖
40分求助(就过了前四个点)
467890
lcx132432432楼主2021/10/22 19:41
#include<bits/stdc++.h>
using namespace std;
const int MAX=500005;
const long long mod=1e9+7;
long long sum1[MAX],a[MAX],sum2[MAX],b[MAX],ans;
int n;
long long qzh[MAX],qzh1[MAX],qzh2[MAX];
long long read(){
	long long s=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9')s=s*10+ch-'0',ch=getchar();
	return s*f;
}
int main(){
	n=read();
	for(int i=1;i<=n;i++){
		a[i]=read();
		sum1[i]=(sum1[i-1]+a[i])%mod;
	}
	for(int i=1;i<=n;i++){
		b[i]=read();
		sum2[i]=(sum2[i-1]+b[i])%mod;
	}
	for(int i=1;i<=n;i++){
		qzh[i]=(qzh[i-1]+sum1[i]*sum2[i]%mod)%mod;
		qzh1[i]=(qzh1[i-1]+sum1[i])%mod;
		qzh2[i]=(qzh2[i-1]+sum2[i])%mod;
	}
	for(int i=1;i<=n;i++){
		long long a1=(qzh[n]-qzh[i-1]+mod)%mod;
		long long a2=(sum1[i-1]*(qzh2[n]-qzh2[i-1]+mod)%mod)%mod;
		long long b1=(sum2[i-1]*(qzh1[n]-qzh1[i-1]+mod)%mod)%mod;
		long long b2=((n-i+1)*(sum1[i-1]*sum2[i-1])%mod)%mod;
		ans=(ans+a1-a2-b1+b2+mod)%mod;
	}
	printf("%lld",ans%mod);
	return 0;
}

求求dalao帮帮孩子吧qwq

2021/10/22 19:41
加载中...