Description

给定两个下标从\(1\)到\(n\)编号的序列 \(a_i,b_i\),定义函数\(S(l,r)(1\le l\le r\le n)\)为:

\[\sum_{i=l}^r a_i\times \sum_{i=l}^r b_i
\]

请你求出下列式子的值:

\[\sum_{l=1}^n \sum_{r=l}^n S(l,r)
\]

由于答案可能很大,你只需要给出答案模 \(10^9+7\)后的结果。

Input

第一行一个正整数\(n\)表示序列长度。

第二行\(n\)个正整数表示\(a_i\)。

第三行\(n\)个正整数表示\(b_i\)。

Output

仅一行一个整数表示答案模\(10^9+7\)后的结果。

Sample Input1

3
2 3 4
3 4 5

Sample Output1

244

Sample Input2

5
11 22 33 44 55
12 34 56 78 90

Sample Output2

201542

Hint

对于\(20\%\)的数据:\(n\le 10\) , \(a_i,b_i\le 10\);

对于\(40\%\)的数据:\(n\le 200\) , \(a_i,b_i\le 100\);

对于\(70\%\)的数据:\(n\le 3000\) , \(a_i,b_i\le 10^5\);

对于\(100\%\)的数据:\(3\le n\le 5\times 10^5\) , \(1\le a_i,b_i\le 10^9\);

题解


\(PS\):我们机房里的\(OIer\)几乎都做出来了,下面分别给出一下几个人的理解


OItby

考虑第\(i\)列的\(a_i\)与\(b_i\),它可以与第\(j(1\le j\le i-1)\)列的到第\(i\)列组成一个\(S(l,r)\),我们用\(sa\)记录前\(i-1\)个\(a\)将与\(b_i\)乘多少次,用\(sb\)记录前\(i-1\)个\(b\)将与\(a_i\)乘多少次,\(f_i\)记录\(\sum_{j=1}^i S(j,i)\),答案就是\(\sum_{i=1}^n f_i\)

#include<iostream>
#include<cstdio>
using namespace std; typedef long long ll;
const ll MOD=(1e+9)+7;
const int N=(5e+5)+1;
ll a[N],b[N],sa,sb,f,Ans; void Scanf(ll &num)
{
int n=0; char c=getchar();
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') n=(n<<3)+(n<<1)+(c^48),c=getchar();
num=n;
} int main()
{
int n;
scanf("%d",&n);
for(register int i=1;i<=n;++i) Scanf(a[i]);
for(register int i=1;i<=n;++i) Scanf(b[i]);
for(register int i=1;i<=n;++i)
{
f=(f+sa*b[i]+sb*a[i]+(i*a[i])%MOD*b[i])%MOD,
sa=(sa+i*a[i])%MOD,
sb=(sb+i*b[i])%MOD,
Ans=(Ans+f)%MOD;
}
cout<<Ans<<endl;
return 0;
}

lxyzxzy

  • T2终于写出来啦!

\(70~pts\)前缀和

#include<iostream>
#include<cstdio>
using namespace std;
const int inf=1e9+7;
const int N=5e5+5;
int a[N],b[N];long long suma[N],sumb[N];
int main()
{
int n;long long ans=0;
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]),suma[i]=(suma[i-1]+a[i])%inf;
for(int i=1;i<=n;i++) scanf("%d",&b[i]),sumb[i]=(sumb[i-1]+b[i])%inf;
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j++) ans=(ans+(suma[j]-suma[i-1])*(sumb[j]-sumb[i-1]))%inf;
cout<<ans<<endl;
return 0;
}

\(100~pts\)

#include<iostream>
#include<cstdio>
using namespace std;
const int inf=1e9+7;
long long a[500005],b;
inline int read()
{
int s=0;
char ch=getchar();
while(ch<'0'||ch>'9') ch=getchar();
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
return s;
}
int main()
{
int n;long long ans=0,suma=0,sumb=0,t=0;
n=read();
for(int i=1;i<=n;i++) a[i]=read();
for(int i=1;i<=n;i++)
{
b=read();
t=(t+(((suma*b)%inf)+(sumb*a[i])%inf)%inf)%inf;
t=(t+((a[i]*=i)%inf*b)%inf)%inf;
suma=(suma+a[i])%inf;
sumb=(sumb+i*b)%inf;
ans=(ans+t)%inf;
}
cout<<ans<<endl;
return 0;
}

YangChuYun

#include<bits/stdc++.h>
using namespace std;
const int INF=1e9+7,MAX=5e+6;
typedef long long LL;
LL a[MAX],b,sum1[MAX],sum2[MAX];
LL n,ans=0;
int main()
{
scanf("%lld",&n);
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
}
for(int i=1,j=n;i<=n;i++,j--)
{
scanf("%lld",&b);
sum1[i]=sum1[i-1]+b*j;
if(sum1[i]>15000000000000)sum1[i]%=INF;
sum2[i]=sum2[i-1]+b*i;
if(sum2[i]>15000000000000)sum2[i]%=INF;
}
for(int i=1,j=n;i<=n;i++,j--)
{
ans=(ans+(a[i]*((sum1[n]-sum1[i-1])*i%INF+sum2[i-1]*j%INF)))%INF;
}
printf("%lld",ans);
return 0;
}

龙卷风

#include <iostream>
#include <cstdio>
using namespace std;
int Mod=1000000007;
long long ans=0,n,a[500001],b[500001];
inline int ReadIn(void)
{
int sum = 0;
int sign = 1;
char ch = getchar();
while(ch > '9' || ch < '0')
{
if(ch == '-')
{
sign = -1;
}
ch = getchar();
}
while(ch >= '0' && ch <= '9')
{
sum = sum*10+ch-'0';
ch = getchar();
}
return sum*sign;
}
int main()
{
n=ReadIn();
for(int i=1;i<=n;i++)
a[i]=ReadIn();
long long d=0,c=0,e=0;
for(int i=1;i<=n;i++)
{
b[i]=ReadIn();
d=(d+(n-i+1)*b[i])%Mod;
}
for(int i=1;i<=n;i++)
{
ans=(ans+a[i]*((d-e)*i%Mod+c*(n-i+1)%Mod)%Mod)%Mod;
c=(c+i*b[i])%Mod;
e=(e+(n-i+1)*b[i])%Mod;
}
printf("%d",ans);
return 0;
}

[Luogu5686] 和积和的更多相关文章

  1. BZOJ_2956_模积和_数学

    BZOJ_2956_模积和_数学 Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j. Input 第一行两个数 ...

  2. 浅谈卷积和C++实现

    1 信号处理中的卷积 无论是信号处理.图像处理还是其他一些领域,我们经常会在一些相互关联的数据处理中使用卷积.卷积可以说是算法中一个非常重要的概念.这个概念最早起源于信号处理之中. 假设对于一个线性系 ...

  3. P2260 [清华集训2012]模积和

    P2260 [清华集训2012]模积和 整除分块+逆元 详细题解移步P2260题解板块 式子可以拆开分别求解,具体见题解 这里主要讲的是整除分块(数论分块)和mod不为素数时如何求逆元 整除分块:求Σ ...

  4. 【BZOJ】2956:模积和

    Time Limit: 10 Sec  Memory Limit: 128 MB Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j ...

  5. 【BZOJ2956】模积和 分块

    [BZOJ2956]模积和 Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j. Input 第一行两个数n,m ...

  6. 矩阵内积和Schur补

    > Many problems in the field of signal processing have been expended into matrix problems.So it's ...

  7. BZOJ 1968_P1403 [AHOI2005]约数研究--p2260bzoj2956-模积和∑----信息学中的数论分块

    第一部分 P1403 [AHOI2005]约数研究 题目描述 科学家们在Samuel星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机“Samuel II”的长时间运算成为了可能.由于在去年一 ...

  8. 洛谷 P5686 [CSP-SJX2019]和积和

    传送门 思路 应用多个前缀和推出式子即可 \(30pts\): 首先如果暴力算的话很简单,直接套三层循环就好了(真的是三层!!最后两个\(sigma\)一起算就好了) \[\sum_{l = 1}^{ ...

  9. (2)卷积 & 卷积和

    参考资料:<信号与系统(第二版)> 杨晓非 何丰 连续信号的是卷积积分,离散信号的是卷积和. 脉冲分量 任意非周期信号,将横坐标分为若干个微小等分,得到Δτ为宽,f(kΔτ)为高的一系列微 ...

随机推荐

  1. HZOJ 20190719 那一天她离我而去(图论最小环)

    这题算是这场考试里最水的一道题了吧,就是求个最小环,但之前没练过,就在考场上yy出了最短路+次短路的傻逼解法,首先是不会求次短路,其次是这显然不对呀,自己随便想想就可以反驳这种解法. 正解比较神,但是 ...

  2. interp2

    %关于interp2的自我理解 %利用已知的信息,对数据进行拟合 %用一个例子进行理解 例:设有数据x=1,2,3,4,5,6,y=1,2,3,4,在由x,y构成的网格上,数据为:12,10,11,1 ...

  3. python中reversed()函数的用法

    reversed(a) # 返回一个反转的迭代器 举例 a = [1, 2, 3, 4, 5] b = reversed(a) # b是一个迭代器 # print(list(b)) = [5, 4, ...

  4. 「HNOI2014」世界树

    题目链接 问题分析 首先观察数据范围可以知道要用虚树.但是要考虑怎么维护原树的距离信息. 如果只有两个关键点,我们可以很方便地找到中点将整棵树划分为两部分.而如果有多个关键点,看起来有效的方法就是多源 ...

  5. 总结了零基础学习Java编程语言的几个基础知识要点

    很多Java编程初学者在刚接触Java语言程序的时候,不知道该学习掌握哪些必要的基础知识.本文总结了零基础学习Java编程语言的几个基础知识要点. 1先了解什么是Java的四个方面   初学者先弄清这 ...

  6. springMVC中的ModelAndView说明

    ModelAndView 类别就如其名称所示,是代表了Spring Web MVC程式中呈现画面时所使用Model资料物件与View资料物件,由于Java程式中一次只能返回一个物件,所以ModelAn ...

  7. TCP->IP输出 之 ip_queue_xmit、ip_build_and_send_pkt、ip_send_unicast_reply

    概述 ip_queue_xmit是ip层提供给tcp层发送回调,大多数tcp发送都会使用这个回调,tcp层使用tcp_transmit_skb封装了tcp头之后,调用该函数,该函数提供了路由查找校验. ...

  8. beta week 2/2 Scrum立会报告+燃尽图 07

    此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9959 一.小组情况 组长:贺敬文组员:彭思雨 王志文 位军营 徐丽君队名: ...

  9. legend3---6、legend3爬坑杂记

    legend3---6.legend3爬坑杂记 一.总结 一句话总结: 学东西不做项目也学不到深处,其实也就是学了没理解透, 1.lavarel中模型关联可以用的实质是? lavarel在数据库中插入 ...

  10. spring boot知识清单

    https://mp.weixin.qq.com/s/q8OI2Ou8-gYP-usjToBbkQ