【蓝桥杯每日一题】前缀和算法

news2025/7/5 3:45:11

🍎 博客主页:🌙@披星戴月的贾维斯
🍎 欢迎关注:👍点赞🍃收藏🔥留言
🍇系列专栏:🌙 蓝桥杯
🌙我与杀戮之中绽放,亦如黎明的花朵🌙
🍉一起加油,去追寻、去成为更好的自己!

蓝桥杯倒计时 45天

文章目录

  • 🍎、前缀和
  • 🍎、例题分析
        • 🍇、[(AcWing)前缀和](https://www.acwing.com/problem/content/797/)
        • 🍇、[(AcWing)子矩阵的和](https://www.acwing.com/problem/content/798/) 二维前缀和
        • 🍇、[(AcWing)截断数组](https://www.acwing.com/problem/content/description/3959/)
  • 🍎、总结

提示:以下是本篇文章正文内容,下面案例可供参考


🍎、前缀和

🍉、前缀和的简单概念

前缀和算法分为一维和二维,一维前缀和可以很快速的求序列中某一段的和。而二维前缀和可以快速求一个矩阵中某个子矩阵的和。

一维前缀和的图解:
在这里插入图片描述

前缀和数组的计算方法:前缀和数组s[i]是由原数组a[i]递推而来的
即:s[i] = s[i - 1] + a[i]

🍎、例题分析

🍇、(AcWing)前缀和

在这里插入图片描述
分析题意:每次询问查询的是原数组l - r区间内的和, 因此我们可以设置一个原数组a和一个前缀和数组

代码示例:

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
const int N = 100010;
int a[N];//原数组
int s[N];//前缀合数组
int n, m;

int main ()
{
    cin >> n >> m;
    for(int i = 1; i <= n; i++) 
        {
            scanf("%d", &a[i]);
            s[i] = s[i - 1] + a[i];
        }
    while(m --)
    {
       int l , r;
       cin >> l >> r;
       printf("%d\n", s[r] - s[l - 1]);
    }
    
    return 0;
}

解法2:因为本题不需要用到原数组a,则可以直接创建一个前缀和数组s,并且原数组a上 L - R 区间内的值就是前缀和数组 s[R] - s[L - 1];
代码示例:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int m, n;
int s[100010];
int main ()
{
    cin >> n >> m;
    for(int i = 1; i <= n; i++)
    {
        scanf("%d", &s[i]);
        s[i] += s[i - 1];
    }
    while(m --)
    {
        int ans = 0;
        int l, r;
        cin >> l >> r;
        ans = s[r] - s[l - 1];
        cout << ans << endl;
    }
    return 0;
}

🍇、(AcWing)子矩阵的和 二维前缀和

图解二维前缀和的公式
在这里插入图片描述
在这里插入图片描述
代码示例:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 1010;
int a[N][N], s[N][N];
int n, m, q;
int main ()
{
    cin >> n >> m >> q;
    for(int i =  1; i <= n; i++)
        for(int j = 1; j <= m; j++)
        {
            scanf("%d", &a[i][j]);
            s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j];//计算二维前缀和
        }
    while(q --)
    {
        int x1, x2, y1, y2;//计算每一次结果
        cin >> x1 >> y1 >> x2 >> y2;
        int ans = s[x2][y2] - s[x1 -1][y2] - s[x2][y1 - 1] + s[x1 - 1][y1 -1];
        cout << ans << endl;
    }
    
    return 0;
}

🍇、(AcWing)截断数组

算法:前缀和 + 枚举
在这里插入图片描述
**分析题意:枚举第二刀i处。
在这里插入图片描述
代码示例:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
const int N = 100010;
int n;
int s[N];
int main ()
{
    cin >> n;
    for(int i =1; i <= n; i++)
    {
        int x;
        scanf("%d", &x);
        s[i] = s[i - 1]  + x; //处理前缀和数组s[i]
    }
    if(s[n] % 3) //提前判断结束条件
    {
        cout << "0" << endl;
        return 0;
    }
    LL res = 0;//因为答案可能爆int
    
    for(int i = 3, cnt = 0; i <= n; i++)
    {
        if(s[i - 2] == s[n] / 3) cnt++;
        if(s[n] - s[i - 1] == s[n] / 3) res += cnt; //s[n] - s[i - 1]是计算i - n区间的总和
    }
    printf("%lld\n", res);
    return 0;
}

🍎、总结

    本文简要介绍了前缀和的简要概念和几道前缀和的经典例题,希望大家读后能有所收获!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/363108.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构与算法(三):栈与队列

上一篇《数据结构与算法&#xff08;二&#xff09;&#xff1a;线性表》中介绍了数据结构中线性表的两种不同实现——顺序表与链表。这一篇主要介绍线性表中比较特殊的两种数据结构——栈与队列。首先必须明确一点&#xff0c;栈和队列都是线性表&#xff0c;它们中的元素都具…

4、Redis安装

前言&#xff1a;工具下载地址阿里云盘&#xff1a;Redis&#xff1a;https://www.aliyundrive.com/s/qSYxRyXAxQy提取码: ne27一、Redis下载下载地址&#xff1a;https://github.com/tporadowski/redis/releases此处下载mis版本&#xff0c;安装版mis版直接安装成功就启动服务…

CCNP350-401学习笔记(451-500题)

451、what is the function of the LISP map resolver? A. to send traffic to non-LISP sites when connected to a service provider that does not accept nonroutable EIDs as packet sources B. to connect a site to the LISP-capabie part of a core network, publish …

数据挖掘,计算机网络、操作系统刷题笔记53

数据挖掘&#xff0c;计算机网络、操作系统刷题笔记53 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;orac…

2023年AI语音会议汇总

2023年&#xff0c;AI语音领域学术会议精彩纷呈&#xff0c;语音之家汇总了国内外重要的会议呈现给大家&#xff0c;大家可根据时间统筹安排好2023年的学术活动交流行程。如果信息有误&#xff0c;欢迎指正。 ICASSP 2023 2023 IEEE International Conference on Acoustics, S…

【操作系统】概述

操作系统 操作系统的定义与目标 定义&#xff1a;操作系统是控制管理计算机系统的硬软件&#xff0c;分配调度资源的系统软件。 目标&#xff1a;方便性&#xff0c;有效性&#xff08;提高系统资源的利用率、提高系统的吞吐量&#xff09;&#xff0c;可扩充性&#xff0c;…

node.js降低版本的方式(解决sass和node.js冲突)

一、概述 在使用vue的时候&#xff0c;会遇到项目的依赖&#xff08;package.json可以查看依赖信息&#xff09;下载失败的原因。因为项目用的依赖和要运行环境的node.js版本起了冲突&#xff0c;这个时候就要么更改项目的依赖版本&#xff0c;要么更改node.js的版本。本文示范…

11种主流生成式AI应用【2023】

生成式 AI 允许在几分钟内生成新颖逼真的视觉、文本和动画内容。 据 Gartner 称&#xff0c;到 2025 年&#xff0c;生成式 AI 生成的数据将占所有生成数据的 10%。 作为 2022 年最重要的战略技术趋势之一&#xff0c;人工智能 (AI) 的这一分支具有广泛的应用&#xff0c;适用…

提高转化率的 3 个客户引导最佳实践

如果您的试用客户没有转化为付费客户&#xff0c;或者您总体上正在努力解决试用到付费转化率&#xff0c;那么您来对地方了。本文的最终目标是向您展示一些可用于提高自己的激活率和整体试用到付费转化的最佳客户引导实践。SaaS公司目前生活在一个以产品为主导的增长时代。换句…

Tencent OS下逻辑卷(LVM)增加硬盘扩容

上一篇文章写了逻辑卷创建以及使用剩余空间为已经创建的逻辑卷扩容。 本篇是针对卷组空间已经用尽时的扩容方法。那就是增加硬盘。 首先我们为虚拟机增加硬盘/dev/sdd 使用fdisk为/dev/sdd分区,方法在上一篇文章已经描述,在此不再赘述。 新增的硬盘使用如下命令添加到卷组…

【日志框架-笔记】JUL日志框架的介绍及其使用

日志框架JUL日志框架入门程序Logger直接的父子继承关系Formatters独立的配置文件进行编写日志使用日志打印异常学习日志无非就是为了四大目的&#xff1a; 问题诊断&#xff0c;调试程序&#xff1b;错误定位&#xff0c;定位数据问题、网络问题、内存问题等错误位置&#xff…

【进阶教程】Appium自动化测试,太详细了!

目录Appium环境搭建Mac iOS环境搭建Appium基础Appium进阶Monkey的使用Copyadb shell monkey -p com.lqr.wechat -v 500 > monkey.logadb shell monkey -p com.lqr.wechat -vvv 5000 > monkey2.logadb shell monkey -p com.lqr.wechat -vvv 5000--send1556166765229 --thr…

pdb文件删除杂原子 HETATM;保留或去除水分子

删除杂原子 HETATM&#xff1b;去除水分子 with open(r"C:*****\StructA.pdb", "r") as inputFile,open(r"C*****8\StructA_remove_HETATM.pdb","w") as outFile:for line in inputFile:if not line.startswith("HETATM"):…

C++复习笔记13

多态&#xff1a;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同的状态。&#xff08;同一个接口根据调用对象不同产生不同的行为&#xff09;。两个条件&#xff1a; 1. 必须通过基类的指针或者引用调用虚函数。 2. 被调用的函数必须是虚函数&#x…

ESP32 Arduino FAT文件系统详细使用教程

ESP32 Arduino FAT文件系统详细使用教程&#x1f4cc;参考1&#xff08;在 Linux环境下创建二进制文件&#xff09;&#xff1a;https://github.com/marcmerlin/esp32_fatfsimage&#x1f4cc;参考2 http://marc.merlins.org/perso/arduino/post_2019-03-30_Using-FatFS-FFat-o…

Scala函数式编程(第五章:函数基础、函数高级详解)

文章目录第 5 章 函数式编程5.1 函数基础5.1.1 函数基本语法5.1.2 函数和方法的区别5.1.3 函数定义5.1.4 函数参数5.1.5 函数至简原则&#xff08;重点&#xff09;5.2 函数高级5.2.1 高阶函数5.2.2 匿名函数5.2.3 高阶函数案例5.2.4 函数柯里化&闭包5.2.5 递归5.2.6 控制抽…

GooglePlay SSL Error Handler

应用上架GooglePlay 收到邮件提示 出现这个原因是因为我在app中使用webview加载Https的H5界面&#xff0c;在onReceivedSslError()中处理SslErrorHandler时&#xff0c;出现白屏现象&#xff0c;原因是webview默认在加载有证书验证的url时&#xff0c;会默认使用handler.cancel…

SPDK vhost target

SPDK vhost target主流的I/O设备虚拟化的方案1.virtio2.vhost加速1&#xff09;QEMU virtio-scsiQemu 架构2&#xff09;Kernel vhost-scsi3&#xff09;SPDK vhost-user-scsi3.SPDK vhost-scsi加速4.SPDK vhost-NVMe加速主流的I/O设备虚拟化的方案 纯软件模拟&#xff1a;完全…

vTESTstudio - VT System CAPL Functions - VT7001(续1)

vtsSetInterconnectionMode - 设置VT7001的电源输出模式功能&#xff1a;设置电源模块VT7001的三个可能电源和两个电源输出的互连模式。注意&#xff1a;此函数不能在任何CAPL处理程序例程或ECU节点中调用。它只能在测试模块的MainTest方法上下文中调用&#xff1b;使用在测量开…

企业为什么需要数据可视化报表

数据可视化报表是在商业环境、市场环境已经改变之后&#xff0c;发展出来为当前企业提供替代解决办法的重要方案。而且信息化、数字化时代&#xff0c;很多企业已经进行了初步的信息化建设&#xff0c;沉淀了大量业务数据&#xff0c;这些数据作为企业的资产&#xff0c;是需要…