P5686 和积和
写在前面
数学题接触的少,卡了半下午,愣是没想到直接往前缀和上考虑,按元素强推莽了半下午
Description
Solution
记 \(A,B\) 的前缀和序列分别为 \(sA,sB\)。
那么随便找一组数据,就会发现答案可以由一坨下标相等的前缀和积和减去另外一坨下标不等的前缀和积和。
而且下标相等的部分正好是对于每个下标 \(i\), \(sA_i sB_i\) 都被计算了 \(n\) 次。
那么加的部分就很好处理了。即:
\]
减的部分不难看出是 \(sA\) 与 \(sB\) 所有的一一对应且下标不同的组合。
所以对于每个 \(sA_i\),只需要让它去乘以所有的下标 \(j<i\) 的 \(sB_j\),并将结果求和。
对于每个 \(sb_i\) 亦然。
提公因式之后,由于计算过程是静态的,这个过程显然可以通过再预处理出一个超级前缀和 \(SA,Sb\),即前缀和的前缀和来优化实现。
那么这部分的计算式即为:
\]
总的式子即为:
\]
根据计算式易知时间复杂度为 \(\Theta(n)\)。
code:
#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int Maxn = 5e5 + 5;
const int mod = 1e9 + 7;
inline LL read() {
LL f = 1, w = 0; char ch = getchar();
for (; !isdigit(ch); ch = getchar()) if (ch == '-') f = -1;
for (; isdigit(ch); ch = getchar()) w = (w << 3) + (w << 1) + (ch ^ '0');
return f * w;
}
LL n, t;
LL a[Maxn], b[Maxn];
LL Sa[Maxn], Sb[Maxn];
LL sa[Maxn], sb[Maxn];
LL ans;
int main()
{
n = read();
t = (n % mod + 1 % mod) % mod;
for(register int i = 1; i <= n; ++i) a[i] = read() % mod;
for(register int i = 1; i <= n; ++i) b[i] = read() % mod;
for(register int i = 1; i <= n; ++i)
{
sa[i] = ((sa[i - 1] % mod) + (a[i] % mod)) % mod;
sb[i] = ((sb[i - 1] % mod) + (b[i] % mod)) % mod;
Sa[i] = ((Sa[i - 1] % mod) + (sa[i] % mod)) % mod;
Sb[i] = ((Sb[i - 1] % mod) + (sb[i] % mod)) % mod;
ans = ((ans % mod) + (((((sa[i] % mod) * (sb[i] % mod)) % mod) * (n % mod)) % mod)) % mod;
}
for(register int i = 2; i <= n; ++i)
{
ans = ((ans % mod) - (((sa[i] % mod) * (Sb[i - 1] % mod)) % mod) + mod) % mod;
ans = ((ans % mod) - (((sb[i] % mod) * (Sa[i - 1] % mod)) % mod) + mod) % mod;
}
printf("%lld", ans);
return 0;
}
P5686 和积和的更多相关文章
- 洛谷 P5686 [CSP-SJX2019]和积和
传送门 思路 应用多个前缀和推出式子即可 \(30pts\): 首先如果暴力算的话很简单,直接套三层循环就好了(真的是三层!!最后两个\(sigma\)一起算就好了) \[\sum_{l = 1}^{ ...
- BZOJ_2956_模积和_数学
BZOJ_2956_模积和_数学 Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j. Input 第一行两个数 ...
- 浅谈卷积和C++实现
1 信号处理中的卷积 无论是信号处理.图像处理还是其他一些领域,我们经常会在一些相互关联的数据处理中使用卷积.卷积可以说是算法中一个非常重要的概念.这个概念最早起源于信号处理之中. 假设对于一个线性系 ...
- P2260 [清华集训2012]模积和
P2260 [清华集训2012]模积和 整除分块+逆元 详细题解移步P2260题解板块 式子可以拆开分别求解,具体见题解 这里主要讲的是整除分块(数论分块)和mod不为素数时如何求逆元 整除分块:求Σ ...
- 【BZOJ】2956:模积和
Time Limit: 10 Sec Memory Limit: 128 MB Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j ...
- 【BZOJ2956】模积和 分块
[BZOJ2956]模积和 Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j. Input 第一行两个数n,m ...
- 矩阵内积和Schur补
> Many problems in the field of signal processing have been expended into matrix problems.So it's ...
- BZOJ 1968_P1403 [AHOI2005]约数研究--p2260bzoj2956-模积和∑----信息学中的数论分块
第一部分 P1403 [AHOI2005]约数研究 题目描述 科学家们在Samuel星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机“Samuel II”的长时间运算成为了可能.由于在去年一 ...
- (2)卷积 & 卷积和
参考资料:<信号与系统(第二版)> 杨晓非 何丰 连续信号的是卷积积分,离散信号的是卷积和. 脉冲分量 任意非周期信号,将横坐标分为若干个微小等分,得到Δτ为宽,f(kΔτ)为高的一系列微 ...
随机推荐
- java.lang.NoSuchMethodError的解决办法
开发一个知识图谱在线服务(基于springcloud+vue)构建中医理论的知识图谱构建帕金森的知识图谱提供免费的知识图谱服务,希望能为朋友们的生活.学习.工作提供帮助(敬请期待)PS:关注后,点击头 ...
- [leetcode299] 299. Bulls and Cows
public String getHint(String secret, String guess) { /* 判断bull 是通过比较两个字符串的每一位,每次相同就删除该字符出现的次数,因为后边的 ...
- CSS解析
CSS(层叠样式表) CSS层叠样式表(Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言. ...
- reactor模式前序(二):NIO WEB服务器设计
前文介绍了传统IO的WEB经典服务器 reactor模式前序:传统IO的WEB服务器设计 下面看看JAVA NIO的WEB服务器设计 NIO是基于事件驱动的,对于NIO来说,重要组件是Selector ...
- 循序渐进VUE+Element 前端应用开发(33)--- 邮件参数配置和模板邮件发送处理
在系统处理中,有时候需要发送邮件通知用户,如新增用户的邮件确认,密码找回,以及常规订阅消息.通知等内容处理,都可以通过邮件的方式进行处理.本篇随笔介绍结合VUE+Element 前端,实现系统的邮件参 ...
- SICP 课程总结 & 复习
SICP 课程总结 & 复习 小作文 有赖于那个终极的.伟大的.命定的教务系统,我选上了这门课:SICP,Structure and Interpret of Computer Program ...
- maven项目pom.xml解析
- 温故而知新--day1
温故而知新--day1 变量类型 变量是计算机存储数据的内存空间,由于计算机可以处理不同的数据,不同的数据就要定义不同的数据类型.python的数据类型很多,还可以自定义数据类型,常用的一般数据类型有 ...
- 微信小程序项目转换为uni-app项目
一.它是谁? [miniprogram-to-uniapp]转换微信小程序"项目为uni-app项目.原则上混淆过的项目,也可以进转换,因为关键字丢失,不一定会完美. 二.它的原理是什么? ...
- 2021升级版微服务教程6—Ribbon使用+原理+整合Nacos权重+实战优化 一篇搞定
2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」 教程全目录「含视频」:https://gitee.c ...