蓝桥杯之前缀和

一维前缀

解题思路

看到“区间之和”问题,直接想到“前缀和”
前缀和的核心公式: sum[i]=sum[i−1]+a[i]

利用前缀和求区间和 [l,r] 的公式: 区间和=sum[r]−sum[l−1]

解题步骤模板

  1. 输入数组

    • 读取数组长度 n 和查询次数 m。

    • 读取数组 a 的每个元素。

  2. 计算前缀和

    • 初始化一个前缀和数组 sum,长度为 n+1(方便处理边界情况)。

    • 遍历数组 a,计算前缀和

      for (int i = 1; i <= n; i++) {sum[i] = sum[i - 1] + a[i];
      }
  3. 处理查询

    • 对于每个查询 [l,r],直接利用前缀和公式计算区间和

      System.out.println(sum[r] - sum[l - 1]);

示例代码模板 

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);// 输入数组长度和查询次数int n = scan.nextInt();int m = scan.nextInt();// 输入数组int[] a = new int[n + 1];int[] sum = new int[n + 1];// 计算前缀和for (int i = 1; i <= n; i++) {a[i] = scan.nextInt();sum[i] = sum[i - 1] + a[i];}// 处理查询for (int i = 0; i < m; i++) {int l = scan.nextInt();int r = scan.nextInt();System.out.println(sum[r] - sum[l - 1]);}scan.close();}
}

思维导图

  1. 看到“区间之和”想到“前缀和”

    • 公式:sum[i]=sum[i−1]+a[i]

    • 区间和:sum[r]−sum[l−1]

  2. 实现步骤

    • 输入数组和查询。

    • 计算前缀和。

    • 处理查询并输出结果。

训练方法

  1. 遇到“区间之和”问题,直接写前缀和公式: sum[i]=sum[i−1]+a[i] 区间和=sum[r]−sum[l−1]

  2. 多做类似题目,强化这种思维模式。例如:蓝桥官网、力扣等平台上的区间和问题。

二维前缀和

问题描述

给定一个 n×mn×m 大小的矩阵 AA。

给定 qq 组查询,每次查询为给定 44 个正整数 x1,y1,x2,y2x1​,y1​,x2​,y2​,你需要输出 ∑i=x1x2∑j=y1y2Ai,j∑i=x1​x2​​∑j=y1​y2​​Ai,j​ 的值。

输入格式

第一行输入 33 个正整数 n,m,qn,m,q。(1≤n,m≤103,1≤q≤1051≤n,m≤103,1≤q≤105)

接下来 nn 行每行输入 mm 个整数,表示 Ai,jAi,j​。(−103≤Ai,j≤103,1≤i≤n,1≤j≤m)(−103≤Ai,j​≤103,1≤i≤n,1≤j≤m)

接下来 qq 行,每行输入 44 个正整数 x1,y1,x2,y2x1​,y1​,x2​,y2​。(1≤x1≤x2≤n,1≤y1≤y2≤m)(1≤x1​≤x2​≤n,1≤y1​≤y2​≤m)

输出格式

对于每次查询,输出一个整数,表示查询的子矩阵的和。

样例输入

3 4 3
1 7 2 4
3 6 2 8
2 1 2 3
1 1 2 2
2 1 3 4
1 3 3 4

样例输出

17
27
21

解题思路

1. 看到“二维区间和”问题,直接想到“二维前缀和”
  • 二维前缀和的核心公式:

    sum[i][j]=sum[i][j−1]+sum[i−1][j]−sum[i−1][j−1]+a[i][j]
  • 查询子矩阵和的公式:

    区间和=sum[x2][y2]−sum[x2][y1−1]−sum[x1−1][y2]+sum[x1−1][y1−1]
2. 实现步骤
  1. 输入矩阵

    • 读取矩阵的行数 n、列数 m 和查询次数 q

    • 读取矩阵 a 的每个元素。

  2. 计算二维前缀和

    • 初始化一个二维前缀和数组 sum,大小为 (n+1)×(m+1)。

    • 遍历矩阵 a,计算每个位置的二维前缀和:

      java

      复制

      for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {a[i][j] = scan.nextInt();sum[i][j] = sum[i][j - 1] + sum[i - 1][j] - sum[i - 1][j - 1] + a[i][j];}
      }
  3. 处理查询

    • 对于每个查询 (x1,y1) 到 (x2,y2),利用二维前缀和公式计算子矩阵和:

      java

      复制

      System.out.println(sum[x2][y2] - sum[x2][y1 - 1] - sum[x1 - 1][y2] + sum[x1 - 1][y1 - 1]);
  4. 输出结果

    • 对每个查询输出对应的子矩阵和。

 代码模板

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);// 输入矩阵的行数、列数和查询次数int n = scan.nextInt();int m = scan.nextInt();int q = scan.nextInt();// 创建数组存储原始矩阵和前缀和int[][] a = new int[n + 1][m + 1];int[][] sum = new int[n + 1][m + 1];// 计算二维前缀和for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {a[i][j] = scan.nextInt();sum[i][j] = sum[i][j - 1] + sum[i - 1][j] - sum[i - 1][j - 1] + a[i][j];}}// 处理查询for (int i = 0; i < q; i++) {int x1 = scan.nextInt();int y1 = scan.nextInt();int x2 = scan.nextInt();int y2 = scan.nextInt();System.out.println(sum[x2][y2] - sum[x2][y1 - 1] - sum[x1 - 1][y2] + sum[x1 - 1][y1 - 1]);}scan.close();}
}

总结

  1. 看到“二维区间和”问题,直接想到“二维前缀和”。

  2. 核心公式

    • 二维前缀和:sum[i][j]=sum[i][j−1]+sum[i−1][j]−sum[i−1][j−1]+a[i][j]

    • 查询子矩阵和:区间和=sum[x2][y2]−sum[x2][y1−1]−sum[x1−1][y2]+sum[x1−1][y1−1]

  3. 实现步骤

    • 输入矩阵和查询。

    • 计算二维前缀和。

    • 处理查询并输出结果。

相关的习题练习

小秋的矩阵
问题描述

给你一个 nn 行 mm 列只包含 00 和 11 的矩阵,求它的所有子矩阵中,是方阵而且恰好包含 kk 个 00 的数量。

方阵是行数和列数相等的矩阵。

子矩阵是从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与列的相对顺序),被称为原矩阵的一个子矩阵。

输入格式

第 11 行输入 33 个整数 n,m,kn,m,k,表示矩阵的行数,列数和所求子矩阵包含 00 的数量。

接下来 nn 行,每行输入 mm 个整数,第 ii 表示给定矩阵的第 ii 行。

输出格式

输出仅一行,包含 11 个整数,表示答案。

样例输入

3 4 2
0 1 1 0
1 0 0 1
0 1 0 0

样例输出

4

说明

共有 44 个阶数为 22 的方阵符合条件,左上角的坐标分别为 (1,1),(1,2),(1,3),(2,1)(1,1),(1,2),(1,3),(2,1)。

评测数据规模

对于 2020% 的评测数据,1≤n×m≤1031≤n×m≤103。

对于 4040% 的评测数据,1≤n×m≤1051≤n×m≤105。

对于 100100% 的评测数据,1≤n×m≤1061≤n×m≤106,0≤k≤n×m0≤k≤n×m。

代码实现

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);// 读取行数、列数和目标零的个数int n = scan.nextInt();int m = scan.nextInt();int k = scan.nextInt();// 创建数组存储原始矩阵和前缀和int[][] tur = new int[n + 1][m + 1];int[][] sum = new int[n + 1][m + 1];// 输入矩阵并计算前缀和for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {tur[i][j] = scan.nextInt();sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + tur[i][j];}}// 计数符合条件的子矩阵int count = 0;// 遍历所有可能的正方形子矩阵的大小for (int size = 1; size <= Math.min(n, m); size++) {// 遍历所有可能的起始位置for (int i = 1; i <= n - size + 1; i++) {for (int j = 1; j <= m - size + 1; j++) {// 计算子矩阵的右下角坐标int x2 = i + size - 1;int y2 = j + size - 1;// 计算子矩阵的和int total = sum[x2][y2] - sum[x2][j - 1] - sum[i - 1][y2] + sum[i - 1][j - 1];// 计算子矩阵中零的个数int tmp = size * size - total;// 如果符合条件,计数器加1if (tmp == k) {count++;}}}}// 输出结果System.out.println(count);scan.close();}
}

 自学蓝桥杯笔记,希望我们可以一起学习!

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

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

相关文章

【学习笔记】计算机网络(八)—— 音频/视频服务

第8章 互联网上的音频/视频服务 文章目录 第8章 互联网上的音频/视频服务8.1概述8.2 流式存储音频/视频8.2.1 具有元文件的万维网服务器8.2.2 媒体服务器8.2.3 实时流式协议 RTSP 8.3 交互式音频/视频8.3.1 IP 电话概述8.3.2 IP电话所需要的几种应用协议8.3.3 实时运输协议 RTP…

【WRF运行】解决metgrid生成文件太大无内存!

目录 方法:改变工作目录运行 metgrid.exe参考由于我的运行内存过小,当研究区较大时,metgrid生成文件内存太大,导致每次运行都报错,此时可更改工作目录(空余文件夹)以运行 metgrid.exe(并非必须在wrf安装目录下运行!!!)。 metgrid.exe 本身不支持直接通过参数或 nam…

基于 Django 进行 Python 开发

基于 Django 进行 Python 开发涉及多个方面的知识点,以下为你详细介绍: 1. Django 基础 项目与应用创建 借助django-admin startproject project_name来创建新的 Django 项目。利用python manage.py startapp app_name创建新的应用。项目结构 理解项目各文件和目录的作用,像…

【sylar-webserver】8 HOOK模块

文章目录 知识点HOOK实现方式非侵入式hook侵入式hook ⭐⭐⭐ 覆盖系统调用接口获取被全局符号介入机制覆盖的系统调用接口 具体实现C 模板成员函数继承 和 成员函数指针类型匹配 ⭐⭐⭐⭐⭐FdCtx 和 FdManager ⭐⭐判断socket的小技巧FdCtxFdManager connect hook ⭐do_io模板 …

SpringAI+DeepSeek大模型应用开发——1 AI概述

AI领域常用词汇 LLM&#xff08;LargeLanguage Model&#xff0c;大语言模型&#xff09; 能理解和生成自然语言的巨型AI模型&#xff0c;通过海量文本训练。例子&#xff1a;GPT-4、Claude、DeepSeek、文心一言、通义干问。 G&#xff08;Generative&#xff09;生成式: 根据上…

SpringBoot 基本原理

SpringBoot 为我们做的自动配置&#xff0c;确实方便快捷&#xff0c;但一直搞不明白它的内部启动原理&#xff0c;这次就来一步步解开 SpringBoot 的神秘面纱&#xff0c;让它不再神秘。 目录 SpringBootApplication 背后的秘密 Configuration ComponentScan EnableAutoC…

2025.4.17总结

工作&#xff1a;今天对需求的测试设计进行了完善&#xff0c;然后&#xff0c;对测试设计进行了评审&#xff0c;最后提了个问题单。 反思这个过程&#xff0c;要说不足的地方&#xff0c;就是评审的时候总觉得自己吐字不清晰&#xff0c;表达能力早就想提升了&#xff0c;但…

2021-11-14 C++三七二十一数

缘由c编程怎么写&#xff0c;紧急求解-编程语言-CSDN问答 void 三七二十一数() {//缘由https://ask.csdn.net/questions/7566632?spm1005.2025.3001.5141int n 0, a 0, b 0, p 1;std::cin >> n;while (n--){std::cin >> a >> b;while (a<b){if (a %…

大模型面经 | DeepSpeed中ZeRO-1、ZeRO-2和ZeRO-3的区别是什么?

大家好,我是皮先生!! 今天给大家分享一些关于大模型面试常见的面试题,希望对大家的面试有所帮助。 往期回顾: 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题一) 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题二) 大模型面经 | 春招、秋招算法…

spring boot 文件上传

1.编写文件上传的表单页面 <!DOCTYPE html> <html lang"en" xmlns:th"http://www.thymeleaf.org"> <head><meta charset"UTF-8"><meta http-equiv"Content-Type" content"text/html; charsetUTF-8&qu…

机器学习核心算法全解析:从基础到进阶的 18 大算法模型

在机器学习领域&#xff0c;算法模型是解决实际问题的核心工具。 不同的算法适用于不同的数据场景和任务需求&#xff0c;理解它们的原理与应用是掌握机器学习的关键。 以下将详细解析 18 个核心算法模型&#xff0c;涵盖监督学习、无监督学习、集成学习和深度学习等多个领域…

5G网络切片:精准分配资源,提升网络效率的关键技术

5G网络切片&#xff1a;精准分配资源&#xff0c;提升网络效率的关键技术 随着5G技术的广泛应用&#xff0c;网络切片&#xff08;Network Slicing&#xff09;作为其核心创新之一&#xff0c;正在改变传统网络架构。它通过将物理网络划分为多个逻辑网络&#xff08;切片&…

Spring Boot中Excel处理完全指南

文章目录 1. Excel处理基础知识1.1 为什么需要在应用中处理Excel文件&#xff1f;1.2 Java中的Excel处理库介绍1.2.1 Apache POI1.2.2 EasyExcel1.2.3 JExcel1.2.4 Apache POI SXSSF 1.3 Spring Boot中集成Excel处理 2. 在Spring Boot中集成Excel处理库2.1 集成Apache POI2.1.1…

Elasticsearch 8.18 中提供了原生连接 (Native Joins)

作者&#xff1a;来自 Elastic Costin Leau 探索 LOOKUP JOIN&#xff0c;这是一条在 Elasticsearch 8.18 的技术预览中提供的新 ES|QL 命令。 很高兴宣布 LOOKUP JOIN —— 这是一条在 Elasticsearch 8.18 的技术预览中提供的新 ES|QL 命令&#xff0c;旨在执行左 joins 以进行…

2025年渗透测试面试题总结-拷打题库03(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 2025年渗透测试面试题总结-拷打题库03 一、Windows与Linux系统提权思路 Windows提权 Linux提权 二、…

【华为】OSPF震荡引起CPU占用率高怎么解决?

原创&#xff1a;厦门微思网络 现象描述 如图所示&#xff0c;Switch_1、Switch_2、Switch_3和Switch_4配置了OSPF协议&#xff0c;发现Switch_1设备的CPU占用率高&#xff0c;ROUT任务占用率明显高于其他任务并且产生路由震荡。 故障组网图 原因分析 网络中IP地址冲突导致…

Everything 安装教程与使用教程(附安装包)

文章目录 前言一、Everything 介绍二、Everything 安装教程1.Everything 安装包下载2.选择安装文件3.选择安装语言4.接受许可协议5.选择安装位置6.配置安装选项7.完成安装 三、Everything 使用教程1.启动软件2.简单关键词搜索3.按类型搜索 前言 在日常使用电脑时&#xff0c;随…

极狐GitLab CI/CD 流水线计算分钟数如何管理?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 计算分钟管理 (PREMIUM SELF) 在极狐GitLab 16.1 中&#xff0c;从 CI/CD 分钟数重命名为计算配额或计算分钟数。 管理员可…

Containerd 1.7.2 离线安装与配置全指南(生产级优化)

Containerd 1.7.2 离线安装与配置全指南&#xff08;生产级优化&#xff09; 摘要&#xff1a;本文详细讲解在无外网环境下部署 Containerd 1.7.2 容器运行时的完整流程&#xff0c;涵盖二进制包安装、私有镜像仓库配置、Systemd服务集成等关键步骤&#xff0c;并提供生产环境…

33-公交车司机管理系统

技术&#xff1a; 基于 B/S 架构 SpringBootMySQLvueelementui 环境&#xff1a; Idea mysql maven jdk1.8 node 用户端功能 1.首页:展示车辆信息及车辆位置和线路信息 2.模块:车辆信息及车辆位置和线路信息 3.公告、论坛 4.在线留言 5.个人中心:修改个人信息 司机端功能…