2 条题解

  • 1
    @ 2024-2-25 12:44:31

    哈希

    # include <bits/stdc++.h>
    using namespace std;
    int n;
    const int N = 5e5 + 10;
    long long a[N], b[N];
    long long prea[N], preb[N];
    long long suma[N], sumb[N];
    long long ret;
    const long long MOD = 1000000007;
    int main() {
    	scanf("%d", &n);
    	for (int i = 1; i <= n; i++) {
    		scanf("%lld", &a[i]);
    		prea[i] = (prea[i - 1] + a[i]) % MOD;
    	}
    	for (int i = 1; i <= n; i++) {
    		scanf("%lld", &b[i]);
    		preb[i] = (preb[i - 1] + b[i]) % MOD;
    	}
    	for (int i = 1; i <= n; i++) {
    		(ret += (((n + 1) * prea[i]) % MOD) * preb[i]) %= MOD;
    		suma[i] = (suma[i - 1] + prea[i]) % MOD;
    		sumb[i] = (sumb[i - 1] + preb[i]) % MOD;
    	}
    	long long tot = (suma[n] * sumb[n]) % MOD;
    	ret = (ret - tot + MOD) % MOD;
    	printf("%lld", ret);
    	return 0;
    }
    
    • 1
      @ 2022-10-2 18:02:03
      #include"bits/stdc++.h"
      using namespace std;
      int n;
      long long a[500010],b[500010];
      long long prea[500010],preb[500010];
      long long suma,sumb;
      long long ans;
      #define mod 1000000007
      int main()
      {
      	scanf("%d",&n);
      	for(int i=1;i<=n;++i)
      	{
      		scanf("%lld",&a[i]);
      		prea[i]=(prea[i-1]+a[i])%mod;
      	}
      	for(int i=1;i<=n;++i)
      	{
      		scanf("%lld",&b[i]);
      		preb[i]=(preb[i-1]+b[i])%mod;
      	}
      	for(int i=1;i<=n;i++)
      	{
      		(ans+=(((n+1)*prea[i])%mod)*preb[i])%=mod;
      		suma=(suma+prea[i])%mod;
      		sumb=(sumb+preb[i])%mod;
      	}
      	long long tot=(suma[n]*sumb[n])%mod;
      	ans=(ans-tot+mod)%mod;
      	printf("%lld",ans);
      	return 0;
      }
      //by fairicle
      
      • 1

      信息

      ID
      4609
      时间
      1000ms
      内存
      125MiB
      难度
      3
      标签
      递交数
      5
      已通过
      3
      上传者