每日算法打卡:子矩阵的和 day 8

文章目录

    • 原题链接
    • 题目描述
        • 输入格式
        • 输出格式
        • 数据范围
        • 输入样例:
        • 输出样例:
    • 题目分析
    • 示例代码

原题链接

796. 子矩阵的和

题目难度:简单

题目描述

输入一个 n 行 m 列的整数矩阵,再输入 q 个询问,每个询问包含四个整数 x 1 , y 1 , x 2 , y 2 x_1, y_1, x_2, y_2 x1,y1,x2,y2,表示一个子矩阵的左上角坐标和右下角坐标。

对于每个询问输出子矩阵中所有数的和。

输入格式

第一行包含三个整数 n,m,q。

接下来 n 行,每行包含 m 个整数,表示整数矩阵。

接下来 q 行,每行包含四个整数 x 1 , y 1 , x 2 , y 2 x_1, y_1, x_2, y_2 x1,y1,x2,y2,表示一组询问。

输出格式

共 q 行,每行输出一个询问的结果。

数据范围

1≤n,m≤1000,
1≤q≤200000,
1≤x1≤x2≤n,
1≤y1≤y2≤m,
−1000≤矩阵内元素的值≤1000

输入样例:
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 

题目分析

对于一维的前缀和,就是求某一段的前缀和,这道题是二维数组中的前缀和,是求任意区域的数字之和

如果每一次询问都是暴力算的话,复杂度其实是极高的,因此同样的,我们还是需要用前缀和的做法

对于这个前缀和矩阵,其中的每一个数,就代表了包括这个数和他左上角的所有数的和

第一个问题就是如何计算这个前缀和矩阵,我们的公式是什么,这里我们就可以运用一下数学中容斥原理的思想,或者可以理解为图形面积的加减

例如

屏幕截图 2024-01-08 112736.png

我们是想要计算(2,3)的数字,实际上就需要用(1,3)的数字加上(2,2)的数字,也就是黄色(包括绿色)加上蓝色(包括绿色),但是这样我们就把绿色加了两遍,因此需要减去一个绿色的(1,2),这样我们就算除了原本(2,3)对应的数字剩下数字的和,最后只需要加上(2,3)原本的数字即可

用公式表示就是

S x , y = S x − 1 , y + S x , y − 1 − S x − 1 , y − 1 + a x , y S_{x,y}=S_{x-1,y}+S_{x,y-1}-S_{x-1,y-1}+a_{x,y} Sx,y=Sx1,y+Sx,y1Sx1,y1+ax,y

利用这个公式就可以计算出前缀和数组了

第二个问题就是,假设我们已经有了前缀和数组,我们如何快速算出子矩阵的和是多少,这里的数学原理是与之前一样的

屏幕截图 2024-01-08 113907.png

我们想要计算蓝色部分的子矩阵和,其实只需要用对应的前缀和矩阵的(3,3)(包括黄色绿色橙色),减去(1,3)(包括橙色绿色),减去(3,1)(包括黄色绿色),这里绿色被减去了两次,因此我们需要再加回来一次,加上(1,1)(绿色)即可

我们使用 ( x 1 , y 1 ) (x_1,y_1) (x1,y1)表示子矩阵左上角的坐标,用 ( x 2 , y 2 ) (x_2,_y2) (x2,y2)表示右下角的坐标,最终结果用公式表示就是

a n s = S x 2 , y 2 − S x 2 , y 1 − 1 − S x 1 − 1 , y 2 + S x 1 − 1 , y 1 − 1 ans = S_{x_2,y_2}-S_{x_2,y_1-1}-S_{x_1-1,y_2}+S_{x_1-1,y_1-1} ans=Sx2,y2Sx2,y11Sx11,y2+Sx11,y11

这就是二维前缀和的思想

示例代码

#include<iostream>
using namespace std;const int N = 1010; // 数据范围int n, m, q;
int arr[N][N], pre[N][N];int main()
{cin >> n >> m >> q;for (int i = 1; i <= n; i++) // 数据输入{for (int j = 1; j <= m; j++){cin >> arr[i][j];pre[i][j] = pre[i - 1][j] + pre[i][j - 1] - pre[i - 1][j - 1] + arr[i][j]; // 计算前缀和矩阵}}while (q--){int x1, y1, x2, y2;cin >> x1 >> y1 >> x2 >> y2;cout << pre[x2][y2] - pre[x1 - 1][y2] - pre[x2][y1 - 1] + pre[x1 - 1][y1 - 1] << '\n'; // 计算子矩阵的和}return 0;
}

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

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

相关文章

即时设计:设计稿与PPT完美结合,让您的创意作品更具影响力

PPT助手 更多内容 在设计领域&#xff0c;将设计稿与PPT结合起来&#xff0c;可以让您的作品更具吸引力和影响力。为了满足这一需求&#xff0c;我们向您推荐一款强大的设计工具&#xff0c;它可以将设计稿导出为PPT文件&#xff0c;支持线上预览和编辑&#xff0c;让您的创意…

2024年大数据不完全预测

人工智能的进步可能是2024年的主要推动力&#xff0c;也凸显出大数据的挑战——如何存储、管理、管理和使用大数据——从未如此紧迫。&#xff0c;因为如果作为基石的数据失控&#xff0c;人工智能就没有意义了。当然反之亦然。 人工智能的进步可能是2024年的主要推动力&#…

【leetcode】力扣算法之相交链表【中等难度】

题目描述 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数…

如何解决海量数据的问题

近年来&#xff0c;高并发、分布式以及大数据成了后端开发者绕不开的话题&#xff0c;招聘软件上几呼都写着有高并发、大数据等项目经历优先时。很多人实际项目往往都是 CRUD&#xff0c;也没机会接触到这些场景啊。 但是&#xff0c;有位伟人曾经说过&#xff1a;没有条件&am…

并发(9)

目录 50.AQS的核心思想是什么&#xff1f; 51.AQS有哪些核心方法&#xff1f; 52.AQS定义什么样的资源获取方式&#xff1f; 53.AQS底层使用了什么样的设计模式&#xff1f; 54.什么是可重入&#xff0c;什么是可重入锁&#xff1f;他用来解决什么问题&#xff1f; 55.Ree…

小程序实现绘制图片 保存到手机

HTML <template><view><canvas canvas-id"myCanvas" :style"{height:380px,width:wWidthpx,background:#FFFFFF}"></canvas><view class"textCenter"><button click"saveCanvas">保存图片</b…

三代半导体材料有何区别

什么是半导体材料 半导体材料是制作半导体器件和集成电路的电子材料&#xff0c;是半导体工业的基础。利用半导体材料制作的各种各样的半导体器件和集成电路&#xff0c;促进了现代信息社会的飞速发展。 绝缘体、半导体和导体的典型电导率范围 半导体材料的研究开始于19世纪初…

什么是消费增值?如何做到增值?

在当今的商业世界&#xff0c;消费观念正在经历一场深刻的变革。传统的消费模式中&#xff0c;消费者购买商品后&#xff0c;交易即结束&#xff0c;消费者与商品的关系仅停留在使用层面。然而&#xff0c;随着消费增值模式的出现&#xff0c;这一观念正在被颠覆。这一模式将消…

React 元素拖拽教程 react-dnd 实现拖拽

实现效果 下面是实际的项目中的应用&#xff0c;涉及业务逻辑代码比较繁琐&#xff0c;下文只说明其基本原理&#xff0c;有疑问的地方请留言 h5原生的拖拽处理起来过分的繁琐&#xff0c;而社区已经提供了成熟的库 react-dnd 来帮助我们实现这些细节&#xff0c;我们只需要关…

Docker 基础

文章目录 1.Docker概述2.Docker安装3.Docker与虚拟机VM4.Docker命令1.帮助命令2.镜像命令1.images2.search3.pull4.rmi 3.容器命令1.run2.ps3.rm4.start5.stop6.restart7.kill 4.常用其他命令1.后台启动容器2.查看日志&#xff08;logs&#xff09;3.查看进程信息&#xff08;t…

使用proteus进行主从JK触发器仿真失败原因的分析

在进行JK触发器的原理分析的时候&#xff0c;我首先在proteus根据主从JK触发器的原理进行了实验根据原理图&#xff0c;如下图&#xff1a; 我进行仿真&#xff0c;在仿真的过程中&#xff0c;我向电路图中添加了外部的置0/1端口&#xff0c;由此在proteus中得到下面的电路图 …

变异系数法

变异系数法是根据统计学方法计算得出系统各指标变化程度的方法&#xff0c;是直接利用各项指标所包含的信息&#xff0c;通过计算得到指标的权重&#xff0c;因此是一种客观赋权的方法。 如果这个指标的变化能够很大影响我们的对象就权重很大 需要进行预处理 指标正向化 指…

红队打靶练习:DERPNSTINK: 1

目录 信息收集 1、arp 2、netdiscover 3、nmap 4、nikto 5、whatweb 目录探测 1、gobuster 2、dirsearch WEB get flag1 robots.txt /php/phpmyadmin /temporary /weblog wordpress wpscan扫描 漏洞发现 提权 系统信息收集 mysql登录 john get flag2 s…

DBSCAN聚类模型

目录 介绍&#xff1a; 一、数据 二、建模 三、评价指标 3.1metrics.homogeneity_score 3.2metrics.completeness_score 3.3metrics.v_measure_score 3.4metrics.adjusted_rand_score 3.5metrics.adjusted_mutual_info_score 3.6metrics.silhouette_score 四、画图…

假设与灵敏度分析

灵敏度分析 关系究竟有多敏感&#xff0c;就要进行灵敏度分析 如果你改变了系统参数后&#xff0c;引起这个模型&#xff08;公式&#xff09;输出的变化的程度不大&#xff0c;则说明你的模型稳定性较强&#xff08;即灵敏性较差&#xff09;&#xff0c;反之则反&#xff01…

前端-基础 常用标签-超链接标签( 锚点链接 )

锚点链接 &#xff1a; 点击链接&#xff0c;可以快速定位到 页面中的某个位置 如果不好理解&#xff0c;讲一个例子&#xff0c;您就马上明白了 >>> 这个是 刘德华的百度百科 &#xff0c;可以看到&#xff0c;页面里面有很多内容&#xff0c;那就得有个目录了 …

为什么地中海气候对葡萄最有益?

优质葡萄酒离不开优秀的葡萄品种&#xff0c;更离不开有利的风土优势。云仓酒庄的品牌雷盛红酒LEESON分享熟悉葡萄酒知识的朋友都听说过不少葡萄酒产区是被老天爷眷顾的地中海气候。 为什么地中海气候对葡萄种植最有益呢&#xff1f;云仓酒庄的品牌雷盛红酒LEESON分享因为这是一…

5g视频短信群发助力汽车销售!

视频短信群发在汽车销售中具有以下优势&#xff1a; 1.增强品牌形象&#xff1a;通过视频短信&#xff0c;可以向潜在客户展示汽车品牌形象、企业文化和价值观&#xff0c;提升品牌认知度和美誉度。 2.产品展示与介绍&#xff1a;视频短信可以用来详细介绍汽车的特点、功能和优…

React.Children.map 和 js 的 map 有什么区别?

JavaScript 中的 map 不会对为 null 或者 undefined 的数据进行处理&#xff0c;而 React.Children.map 中的 map 可以处理 React.Children 为 null 或者 undefined 的情况。 React 空节点&#xff1a;可以由null、undefined、false、true创建 import React from reactexport …

大模型学习第二课

学习目标&#xff1a; 浦语大模型趣味Demo 学习内容&#xff1a; 学习时间&#xff1a; 20240108 学习产出&#xff1a; InternLM介绍 大模型&#xff1a;人工智能领域钟参数数量巨大、拥有庞大计算能力和参数规模的模型。InternLM模型全链条开源&#xff0c;7B&#xff0c;…