AcWing 4405. 统计子矩阵(每日一题)
如果你觉得这篇题解对你有用,可以点点关注再走呗~
题目描述
给定一个 N×M 的矩阵 A,请你统计有多少个子矩阵 (最小 1×1,最大 N×M) 满足子矩阵中所有数的和不超过给定的整数 K ?
输入格式
第一行包含三个整数 N,M 和 K。
之后 N 行每行包含 M 个整数,代表矩阵 A。
输出格式
一个整数代表答案。
数据范围
对于 30%
的数据,N,M≤20,
对于 70% 的数据,N,M≤100,
对于 100% 的数据,1≤N,M≤500;0≤Aij≤1000;1≤K≤2.5×108。
输入样例:
3 4 10
1 2 3 4
5 6 7 8
9 10 11 12
输出样例:
19
样例解释
满足条件的子矩阵一共有 19,包含:大小为 1×1的有 10个。
大小为 1×2的有 3个。
大小为 1×3的有 2个。
大小为 1×4的有 1个。
大小为 2×1的有 3 个。
分析
直接暴力枚举
需要枚举上、下、左、右 四个边界
时间复杂度 O(n^4) = O(10^10)
n=500 500^4=62500000000=6.25x10^10
必定TLE
我们看能不能优化成三维去做?
500^3=125000000=1.25*10^8
这样看还是过不了
于是引入双指针算法将枚举次数降为1.25*10^8/2
时间复杂度为**O(6*10^7)**
这样便可以过了
优化
双指针算法+前缀和
题目问满足子矩阵中所有数的和不超过给定的整数 K的子矩阵
所以我们用前缀和去处理矩阵内所有数的和
时间复杂度为**O(1)**
双指针怎么实现?
下面让我带你来分析
我们需要用到4个变量:
up
(矩阵的上界)
down
(矩阵的下界)
l
(矩阵的左界)
r
(矩阵的右界)
先固定上下界,现在上下界固定下来了。
再依次去枚举上下界,每次枚举上下界时移动左右边界。
我们需要统计的是左右边界移动的矩阵内有多少列
有多少列就有多少个满足条件的矩阵
矩阵个数:r-l+1
为什么统计的是**矩阵内的列数****见盲点分析
怎么样去移动左右边界?
进一步--------------
先固定右边界,再去枚举左边界
过程分析
左边界l
满足当左边界 l
到右边界 r
这一矩阵内所有数的和> K 时。
说明我们的 l~r
这块矩阵不能包含太多的数,l
需要往右移动。
l
一直移动下去,直至 l
移动到 l~r
这块矩阵的所有数的和值<= k 时,l停止。
在计算完这块矩阵内列的矩阵个数后,再去移动r
,依次类推。
确保每次 l~r
这块矩阵内的所有数的和均<=k
这样便可以将矩阵的个数不重不漏的计算出来。
注意
怕很多同学不清楚每一列(个)矩阵代表一列(个)数字
l、r
也是一列矩阵,只不过为了便于理解,将l、r
抽象成两条线/边界来看
其实l、r
本身是一列,是有数字的!!!
下面的分析与此表述同步!
数字图如下:
盲点分析
为什么去枚举l~r
的列数?
我们在枚举时枚举的并不全是向前面的图形那样
上面的图形描绘的是整体的矩阵效果,便于理解双指针的移动。
下面我们来看看枚举时的过程和细节
枚举的过程可以抽象看成是在一整个矩阵内拖动橙色长方形,从右上往左下拉。
实际上是由很多的l、r不断分割矩阵的数,见下图:
注:图形是便于理解,每一条线不代表一种情况,实际计算时不会重复累加。
从图中便可以看到,我们将图形理解成动态的过程,从左上到右下不断划分出小矩阵,再去判断是否满足条件,从而将矩阵的总数加起来。
像图中的蓝色小矩阵即是枚举是每一列的矩阵个数,依次移动指针,累加矩阵个数。
注意:l、r也是一列矩阵,是占据了数字的一列。
为什么计算的是列数?
枚举时计算的是每一列的矩阵数,这是因为我们是从右上往左下移动。
如果统计的是每一行的矩阵数则同一行的矩阵数都被并入最终的结果其中,造成结果的错漏,而从每一行去统计矩阵数也与我们枚举时移动的方向不一致,因此不能是统计每一行的矩阵数。同学们仔细想一下对不对?
关于r-l+1的由来:
先看最普遍的情况:
由上图:l
在左边,r
在右边,中间间隔3列,即3个矩阵,再加上两列其本身所在的那一列矩阵。总共是3+2=5
个矩阵,代入公式检验一下,检查一下对不对?
根据图形,假设r=5,l=1
,中间的列数分别为2、3、4
总共3列
r-l+1=5-1+1=5
结果正确!
再看边界情况:
当r=l
时,代入公式r-l+1=0+1=1。
得出1个,而这个便是r、l所在这一列的矩阵,见下图:
注:每一个矩阵代表一个数字
Accode
import java.util.*;
public class Main{static int N=510;static int [][]a=new int[N][N];static int [][]s=new int[N][N];static int n,m,k;public static void main(String []args) {Scanner sc=new Scanner(System.in);n=sc.nextInt();m=sc.nextInt();k=sc.nextInt();//预处理前缀和,便于计算矩阵内所有数的和值for(int i=1;i<=n;i++) {for(int j=1;j<=m;j++) {a[i][j]=sc.nextInt();s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];}}long res=0;//枚举上下边界for(int up=1;up<=n;up++) {for(int down=up;down<=n;down++) {int l=1;//左边界int r=1;//右边界while(r<=m) {//右边界在整个矩阵内while(l<=r&&!check(up,l,down,r))l++;//不满足和值小于等于k则移动左边界res+=(long)r-l+1;//统计列数r++;//左边界固定下来,可以移动右边界}}}System.out.println(res); }static boolean check(int x1,int y1,int x2,int y2) {//前缀和long sum=s[x2][y2]-s[x1-1][y2]-s[x2][y1-1]+s[x1-1][y1-1];//判断是否满足sum小于等于k这一条件return sum<=k;}
}
往期回顾
不清楚蓝桥杯考什么的点点下方👇
考点秘籍
想背纯享模版的伙伴们点点下方👇
蓝桥杯省一你一定不能错过的模板大全(第一期)
蓝桥杯省一你一定不能错过的模板大全(第二期)
蓝桥杯省一你一定不能错过的模板大全(第三期)
蓝桥杯省一你一定不能错过的模板大全(第四期)!!!
想背注释模版的伙伴们点点下方👇
蓝桥杯必背第一期
蓝桥杯必背第二期
往期精彩回顾
蓝桥杯上岸每日N题 第一期(一)!!!
蓝桥杯上岸每日N题第一期(二)!!!
蓝桥杯上岸每日N题第一期(三)!!!
蓝桥杯上岸每日N题第二期(一)!!!
蓝桥杯上岸每日N题第三期(一)!!!
蓝桥杯上岸每日N题 第四期(最少刷题数)!!!
蓝桥杯上岸每日N题 第五期(山)!!!
蓝桥杯上岸每日N题 第六期(求阶乘)!!!
蓝桥杯上岸每日N题 第七期(小猫爬山)!!!
蓝桥杯上岸每日N题 第八期 (全球变暖)!!!
蓝桥杯每日N题 (消灭老鼠)
蓝桥杯每日N题(杨辉三角形)
蓝桥杯每日N题 (砝码称重)
蓝桥杯上岸每日N题(鸡尾酒)
操作系统期末题库 第九期(完结)
LeetCode Hot100 刷题(第三期)
idea创建SpringBoot项目报错解决方案
数据库SQL语句(期末冲刺)
想看JavaB组填空题的伙伴们点点下方 👇
填空题
竞赛干货
算法竞赛字符串常用操作大全
蓝桥杯上岸必刷!!!(模拟/枚举专题)
蓝桥杯上岸必背!!! (第三期 DP)
蓝桥杯上岸必背!!!(第四期DFS)
蓝桥杯上岸必背!!!(第五期BFS)
蓝桥杯上岸必背!!!(第六期树与图的遍历)
蓝桥杯上岸必背!!!(第七期 最短路算法)
蓝桥杯上岸必背!!!(第八期 简单数论)
蓝桥杯上岸必刷!!!(进制、数位专题)
蓝桥杯上岸考点清单 (冲刺版)!!!
蓝桥杯上岸必背模板 (纯享版)
相关文章:
![](https://img-blog.csdnimg.cn/4bec872d690341ca8ceacd425411aa36.jpeg#pic_center)
AcWing 4405. 统计子矩阵(每日一题)
如果你觉得这篇题解对你有用,可以点点关注再走呗~ 题目描述 给定一个 NM 的矩阵 A,请你统计有多少个子矩阵 (最小 11,最大 NM) 满足子矩阵中所有数的和不超过给定的整数 K ? 输入格式 第一行包含三个整数 N,M 和 K。 之后 N 行每行包含 …...
![](https://img-blog.csdnimg.cn/5f6b1bf7f50841308694954d020ae866.jpeg)
Kali Linux渗透测试技术介绍【文末送书】
文章目录 写在前面一、什么是Kali Linux二、渗透测试基础概述和方法论三、好书推荐1. 书籍简介2. 读者对象3. 随书资源 写作末尾 写在前面 对于企业网络安全建设工作的质量保障,业界普遍遵循PDCA(计划(Plan)、实施(Do…...
![](https://img-blog.csdnimg.cn/2c9934576acf4e71aa516ee2a3b09c30.png)
GPT与BERT模型
NLP任务的核心逻辑是“猜概率”的游戏。BERT和GPT都是基于预训练语言模型的思想,通过大量语料训练得到语言模型。两种模型都是基于Transformer模型。 Bert 类似于Transformer的Encoder部分,GPT类似于Transformer的Decoder部分。两者最明显的在结构上的差…...
![](https://www.ngui.cc/images/no-images.jpg)
2023-09-06力扣每日一题-摆烂暴力
链接: [1123. 最深叶节点的最近公共祖先](https://leetcode.cn/problems/form-smallest-number-from-two-digit-arrays/) 题意: 如题 解: 今天搞一手暴力,按层存,按层取,直到只取到一个 实际代码&…...
![](https://img-blog.csdnimg.cn/img_convert/a531cbfef4d3971d99d0112fac114b18.png)
【Flutter】Flutter 使用 timego 将日期转换为时间描述
【Flutter】Flutter 使用 timego 将日期转换为时间描述 文章目录 一、前言二、安装与基本使用三、如何添加新的语言四、如何覆盖现有的语言或添加自定义消息五、完整示例六、总结 一、前言 你好!我是小雨青年,今天我要为你介绍一个非常实用的 Flutter 包…...
![](https://img-blog.csdnimg.cn/3f53183e3aa449359ceb3fd91084b543.png)
并发容器11
一 JDK 提供的并发容器总结 JDK 提供的这些容器大部分在 java.util.concurrent 包中。 ConcurrentHashMap: 线程安全的 HashMap CopyOnWriteArrayList: 线程安全的 List,在读多写少的场合性能非常好,远远好于 Vector. ConcurrentLinkedQueue: 高效的并…...
![](https://img-blog.csdnimg.cn/2441345ccfed4f22be67e074853bf2e1.png)
Java8实战-总结22
Java8实战-总结22 使用流数值流原始类型流特化数值范围数值流应用:勾股数 使用流 数值流 可以使用reduce方法计算流中元素的总和。例如,可以像下面这样计算菜单的热量: int calories menu.stream().map(Dish::getcalories).reduce(0, Int…...
![](https://www.ngui.cc/images/no-images.jpg)
matlab 实现点云ICP 配准算法
一、算法步骤 (1)在目标点云P中取点集pi∈P; (2)找出源点云Q中的对应点集qi∈Q,使得||qi-pi||=min; (3)计算旋转矩阵R和平移矩阵t,使得误差函数最小; (4)对pi使用上一步求得的旋转矩阵R和平移矩阵t进行旋转和平移变换,的到新的对应点集pi’={pi’=Rpi+t,pi∈P};…...
![](https://www.ngui.cc/images/no-images.jpg)
python提取word文本和word图片
提取文本 docx只支持docx格式,所以如果想读取doc需要另存为docx格式即可 import docx # pip3 install python-docx doc docx.Document(three.docx) for paragraph in doc.paragraphs:print(paragraph.text)提取图片 import zipfile import os, re # docx本质上…...
![](https://img-blog.csdnimg.cn/img_convert/49c14f21c1d00aaf8bc5ef45fb19f68f.png)
iOS开发Swift-9-SFSymbols,页面跳转,view屏幕比例,启动页-和风天气AppUI
1.创建项目 2.设置好测试机型,App显示名称,以及关闭横向展示. 3.下载SF Symbols. https://developer.apple.com/sf-symbols/ 右上角搜索 search ,可以找到很多系统自带图标.选择喜欢的图标,拷贝图标的名字. 插入一个Button,在Image中粘贴图标名称并选择,即可将Button变成想要的…...
![](https://img-blog.csdnimg.cn/f7e6ecdf6f3142cda590f7449ed77cc1.png)
代码优化工具-测试程序执行时间-IDEAdebug+StopWatch
参考: [技巧]IDEA的debugStopWatch监测程序运行时间 添加链接描述 1创建类StopWatchExpand import lombok.extern.slf4j.Slf4j;import org.springframework.util.StopWatch;import java.text.NumberFormat;/*** 检测程序片段运行时间拓展** author sdevil507* cr…...
![](https://img-blog.csdnimg.cn/240df8d1741e4d4f8e17e0ac0a0e1759.png)
力扣每日一题---2594. 修车的最少时间
文章目录 思路解题方法复杂度Code 思路 请注意,能力值越低,修车越快,应该翻译成「排名」,排名越靠前,修车越快。)根据题意可以知道r * n * n < t 的,所以可以利用数学知识进行改变公式&#…...
![](https://img-blog.csdnimg.cn/dd4a5ad7583a4a379d05f0c96c6bee2c.png)
【jvm】运行时数据区
目录 一、运行时数据区一、作用二、说明三、线程共用与私有区域 一、运行时数据区 一、作用 1.内存是非常重要的系统资源,是硬盘和CPU 的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策…...
![](https://img-blog.csdnimg.cn/71badcdb71d94dbd90fca4da2c122cc0.png)
SpringMVC相对路径和绝对路径
1.相对地址与绝对地址定义 在jsp,html中使用的地址,都是在前端页面中的地址,都是相对地址 地址分类:(1),绝对地址,带有协议名称的是绝对地址,http://www.baidu.com&…...
![](https://img-blog.csdnimg.cn/519d3d533d2b4690aeed81f1dc051bca.png)
IIS perl python cbrother php脚本语言配置及简单测试样例程序
上篇笔记写了 IIS 配置 CGI, IIS CGI配置和CGI程序FreeBasic, VB6, VC 简单样例_Mongnewer的博客-CSDN博客 这篇在IIS上配置一些脚本语言。为了操作方便,每种语言在站点下分设文件夹。 1. IIS perl配置 Perl CGI方式是曾经流行的做法。先下载一个开源…...
![](https://www.ngui.cc/images/no-images.jpg)
Oracle Scheduler中日期表达式和PLSQL表达式的区别
参考文档: Database Administrator’s Guide 29.4.5.4 Differences Between PL/SQL Expression and Calendaring Syntax Behavior There are important differences in behavior between a calendaring expression and PL/SQL repeat interval. These differenc…...
![](https://www.ngui.cc/images/no-images.jpg)
Java设计模式:一、六大设计原则-06:依赖倒置原则
文章目录 一、定义:依赖倒置原则二、模拟场景:依赖倒置原则三、违背方案:依赖倒置原则3.1 工程结构3.2 抽奖系统**3.2.1 定义抽奖用户类**3.2.2 抽奖控制 3.3 单元测试 四、改善代码:依赖倒置原则4.1 工程结构4.2 抽奖控制改善4.2…...
![](https://www.ngui.cc/images/no-images.jpg)
信息系统数据同步解决方案
实施数据同步解决方案时,重要的是确保数据同步是安全的、可靠的,并且能够适应系统变化。定期测试和监控数据同步过程,以确保其稳定运行,并随着需求的变化进行适当的调整和优化。 应用场景:信息系统A和信息系统B实现员…...
![](https://img-blog.csdnimg.cn/093c6e7b8ceb4214827fff55250fb84d.png)
LRU算法 vs Redis近似LRU算法
LRU(Least Recently Use)算法,是用来判断一批数据中,最近最少使用算法。它底层数据结构由Hash和链表结合实现,使用Hash是为了保障查询效率为O(1),使用链表保障删除元素效率为O(1)。 LRU算法是用来判断最近最少使用到元素…...
![](https://img-blog.csdnimg.cn/81bd38e9725c42c5bd8a515289f9c511.png)
浅析ARMv8体系结构:异常处理机制
文章目录 概述异常类型中断终止Abort复位Reset系统调用 异常处理流程异常入口异常返回异常返回地址 堆栈选择 异常向量表异常向量表的配置 同步异常解析相关参考 概述 异常处理指的是处理器在运行过程中发生了外部事件,导致处理器需要中断当前执行流程转而去处理异…...
![](https://www.ngui.cc/images/no-images.jpg)
Golang开发--Goroutine的使用
Go 语言天生支持并发编程,提供了丰富的原语和工具来编写并发程序。Goroutine 是 Go 语言中的轻量级执行单位。它们是由 Go 运行时(runtime)管理的,并且能够在单个线程上运行成千上万个 Goroutine。创建 Goroutine 非常高效&#x…...
![](https://www.ngui.cc/images/no-images.jpg)
【Linux】package ‘python-yaml‘ has no installation candidate 如何解决
要解决此问题,可以尝试以下几个步骤: 确保系统已经更新到最新版本。可以使用以下命令进行系统更新: sudo apt update sudo apt upgrade确保您的软件源列表中包含了正确的软件源。可以使用以下命令编辑软件源列表: sudo nano /etc/…...
![](https://www.ngui.cc/images/no-images.jpg)
Selector选择器在AspNetCore中的用法
Selector选择器在AspNetCore中的用法 背景 项目编辑过程中会选择其所属的上级项目,而上级项目在数据结构中是以ParentID的方式表达,而非Project类型,用户不会记录也不应该记录ID值,因此应提供Selector项目下拉框供用户选择。 但…...
![](https://img-blog.csdnimg.cn/d7e8ff4642ea4fd790db223118b92f1c.png)
anaconda3最新版安装|使用详情|Error: Please select a valid Python interpreter
Win11查看安装的Python路径及安装的库 anaconda3最新版安装|使用详情|Error: Please select a valid Python interpreter 介绍开源包管理系统和环境管理系统 ,包括多种语言的包安装,运行,更新,删除,最重要的是可以解…...
![](https://www.ngui.cc/images/no-images.jpg)
java八股文面试[多线程]——锁的分类
1.1 可重入锁、不可重入锁 Java中提供的synchronized,ReentrantLock,ReentrantReadWriteLock都是可重入锁。 重入:当前线程获取到A锁,在获取之后尝试再次获取A锁是可以直接拿到的。 不可重入:当前线程获取到A锁&…...
![](https://img-blog.csdnimg.cn/aa605302508b42d999f817dcc71628c3.png)
儿童安全门和围栏,以及游戏围栏等美国站要求的合规标准是什么?
儿童安全门和围栏 儿童安全门和围栏用于在门口(如门道)内设置围栏,或用作自支撑围栏,将幼儿可能在其中活动的区域围起来。这些商品可能由塑料、金属、乙烯树脂或木制组件等材料制成。此政策包括但不限于可扩展围栏、伸缩安全门和…...
![](https://www.ngui.cc/images/no-images.jpg)
kafka配合ElasticStack技术栈的搭配使用
今日内容: - kafka生产环境调优; - kafka配合ElasticStack技术栈的搭配使用; - zookeeper集群部署; - zookeeper的ACL; - zookeeper的调优; - PB级别项目; - ES8集群搭建/elk; (待定...) 订阅1个的topic: 老男孩: 10 多个不同的主题…...
![](https://img-blog.csdnimg.cn/b8ab9974c102475c99984ffcce7e52e9.png)
对极几何与三角化求3D空间坐标
一,使用对极几何约束求R,T 第一步:特征匹配。提取出有效的匹配点 void find_feature_matches(const Mat &img_1, const Mat &img_2,std::vector<KeyPoint> &keypoints_1,std::vector<KeyPoint> &keypoints_2,std::vector&l…...
![](https://www.ngui.cc/images/no-images.jpg)
英语语法笔记
1.英语五大句型 主谓(主语动词) 主谓宾(主语动词宾语) 主谓宾宾(主语动词简接宾语直接宾语) 主谓宾补(主语动词宾语宾语补语) 主系表(主语系动词主语补语) 1…...
![](https://img-blog.csdnimg.cn/66a66efd3f474a7e81918e0057a84292.png)
ES6的面向对象编程以及ES6中的类和对象
一、面向对象 1、面向对象 (1)是一种开发思想,并不是具体的一种技术 (2)一切事物均为对象,在项目中主要是对象的分工协作 2、对象的特征 (1)对象是属性和行为的结合体 &#x…...
![](/images/no-images.jpg)
西安博网站建设/湖北seo推广
#!/usr/bin/env python #在环境变量env中找Python#coding: utf81.自动补全配置环境: 创建以下文件vim /usr/local/bin/tab.py输入:import readlineimport rlcompleterreadline.parse_and_bind(tab:complete)存储后设置 SPYTHONSTARTUPvim ~/.bash_profil…...
![](/images/no-images.jpg)
做相册网站logo/网推怎么做
转载于:https://www.cnblogs.com/6DAN_HUST/archive/2013/06/02/3114323.html...
![](/images/no-images.jpg)
大德通众包 做网站怎么样/app推广赚佣金
MySQL性能优化--优化数据库结构之优化数据大小 By:授客 QQ:1033553122 尽量减少表占用的磁盘空间。通常,执行查询期间处理表数据时,小表占用更少的内存。 表列 l 尽可能使用最效率(最小)的数据类型。比如,使用更小…...
![](http://www.ibm.com/i/c.gif)
wordpress最好的免费主题2018/怎样制作网站
本文主要介绍了 IBM UDDI 的安全选项配置以及对应的 UDDI V3 API 的使用。深入剖析了 IBM UDDI 中的 UDDI Publishers, APIs 等高级选项的配置。在文章中,作者给出了使用 UDDI V3 API 与用户个性化安全选项配置协同工作的代码片段。对于不同厂商的 UDDI 产品对 UDDI…...
![](https://img-blog.csdnimg.cn/20181215215530512.jpg)
深圳专业做网站的公司/百度竞价是什么工作
(一)block的本质,是一个结构体 (二)捕获变量 第一种:没有参数,在block中打印,无需捕获 void (^block)(void) ^{NSLog("Hello, World!");};编译成c代码后(xc…...
![](/images/no-images.jpg)
天津网站建设普斯泰/百度查重
Flutter 在 Build完成后的监听和每一帧绘制完成后的监听 这个是我们监听要用的重要的类------->WidgetsBinding 官方是这么描述它的 The glue between the widgets layer and the Flutter engine. 中文的意思是 控件层和Flutter引擎之间的粘合剂。就是这个类 它能监听到…...