玄学取模?
查看原帖
玄学取模?
549521
boy♂Next♂dooor楼主2024/10/2 12:36

这是AC代码 如果把那行代码换成注释里的 AC→70

你可能觉得是溢出了.但是题目范围51e51e9=51e14<2631=9.22337203685477580710185*1e5 *1e9=5 *1e14<2^{63}-1=9.223372036854775807 ⋅ 10^ {18} 怎么会爆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;
}

2024/10/2 12:36
加载中...