就差直接抄题解了按照题解修改变量名就ac了
查看原帖
就差直接抄题解了按照题解修改变量名就ac了
940317
lightme楼主2024/5/11 17:43

注释部分是我原汁原味的代码 下面是我按照题解把公式和变量名搬过来的 我不知道为什么我写的就不行

	// 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; 
	} 
	
2024/5/11 17:43
加载中...