求调玄关(有推导过程)
查看原帖
求调玄关(有推导过程)
1053122
liruizhou_lihui楼主2024/9/13 16:58

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e9+7; 
const int NM=5e5+5;
int ans;
int n,a[NM],b[NM];
int sa[NM],sb[NM],ssa[NM],ssb[NM],ssab[NM];
signed main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		sa[i]=a[i]+sa[i-1];
		ssa[i]=sa[i]+ssa[i-1];
		
		sa[i]=(sa[i]+mod)%mod;
		ssa[i]=(ssa[i]+mod)%mod;
	}
	for(int i=1;i<=n;i++)
	{
		cin>>b[i];
		sb[i]=b[i]+sb[i-1];
		ssb[i]=ssb[i-1]+sb[i];
		ssab[i]=ssab[i-1]+sa[i]*sb[i];
		
		sb[i]=(sb[i]+mod)%mod;
		ssb[i]=(ssb[i]+mod)%mod;
		ssab[i]=(ssab[i]+mod)%mod;
	}
	
	for(int l=1;l<=n;l++)
	{
		ans+=(ssab[n]-ssab[l-1])%mod;
		ans=(ans+mod)%mod;
	}
	for(int l=1;l<=n;l++)
	{
		ans-=(((ssa[n]-ssa[l-1])%mod)*sb[l-1])%mod;
		ans=(ans+mod)%mod;
	}
	for(int l=1;l<=n;l++)
	{
		ans-=(sa[l-1]*(ssb[n]-ssb[l-1])%mod)%mod;
		ans=(ans+mod)%mod;
	}
	for(int l=1;l<=n;l++)
	{
		ans+=((n-l+1)*(sa[l-1]-sb[l-1])%mod)%mod;
		ans=(ans+mod)%mod;
	}
	cout<<(ans+mod)%mod;
	return 0;
}
2024/9/13 16:58
加载中...