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. 深度学习笔记(十四)车道线检测 SCNN

    论文:Spatial As Deep: Spatial CNN for Traffic Scene Understanding 代码:https://github.com/XingangPan/SCN ...

  2. canvas风景时钟

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. pymysql pymysql.err.OperationalError 1045 Access denied最简单解决办法

    我使用的是python3.6+pymysql+mysql8.0 在cmd命令行直接输入mysql回车出现:ERROR 1045 (28000): Access denied for user 'ODB ...

  4. docker的数据管理

    容器中管理数据主要有两种方式: 1.数据卷:容器内数据直接映射到本地宿主机. 2.数据卷容器:使用特定容器维护数据卷 数据卷: 数据卷是一个可供容器使用的特殊目录,他将主机操作系统目录直接映射进容器. ...

  5. navicat for mysql安装

    搜索一款navicat for mysql然后进行下载. 步骤阅读 2 当我们下载完成之后首先进行数据包的解压,同时可以运行navicat for mysql程序. 破解工具下载:https://pa ...

  6. flask登录功能实现的思路

    flask登录实现过程思路:前端创建表单,post方法,userno,pwd参数 后端首先创建登录验证函数check(验证函数是指通过request.get来获取前端的userno,pwd.然后将两个 ...

  7. 8 Linux 文件类型

    Linux 系统中的文件是没有扩展名的. 1.通过 ls -l 文件名,看第一个字符判断文件类型: -  普通文件(文本文件.二进制文件.压缩文件.电影.图片等) d  目录文件 b  设备文件(块设 ...

  8. TCP之服务与首部

    1. TCP 的服务 TCP 通过下列方式提供可靠性: 应用数据被分割成 TCP 认为最适合发送的数据块.与 UDP 不同,UDP 应用程序产生的数据报长度将保持不变.由 TCP 传递给 IP 的信息 ...

  9. python3.*之列表常用操作

    首先定义一个列表:names= ["xiaoming","xiaogang","xiaomei","xiaohong"] ...

  10. PHP AJAX返回 "TEXT"

    例子:通过AJAX间接访问数据库,查出Nation表显示在页面上,并添加删除按钮 //首先在外层添加一个按钮,并造好表头 <div><input type="button& ...