蓝桥杯:统计子矩阵(十三届省赛C++组)

news2024/10/7 8:23:42

前言:

这道题目是矩阵类型题目经典题型,解题大体思路是前缀和+双指针扫描,在我这篇博客中

第十三届蓝桥杯省赛C++B组题解_第十三届蓝桥杯b组c++答案_正在黑化的KS的博客-CSDN博客

简单提了一下大致解法,今天刷题时又遇到了一个极其相似的题型,所以写下这篇题解巩固加深记忆。

题目描述 

 

 

朴素解法 

朴素解法其实很简单,其实就是二维前缀和后暴力枚举长和宽,时间复杂度是O(n^{4}),就这个题目的数据范围而言,不能接受,当然也是可以骗点分的,具体代码很简单,这里就不赘述了。

AC解法 

首先,我们这里依然要使用前缀和的技巧,不过这里的前缀和是每列的前缀和,举个例子

g[i][j] 代表的意思是在第j列,第1行到第i行的值。 

现在我们枚举上边界和下边界,即当前枚举矩阵是处在第x行(上边界),和y(下边界)之间的。

接着枚举矩形的右端点,我们可以发现,每次当右端点向右移动的时候,矩形的面积是单调递增的,此时如果矩形的面积大于K,则不合要求,固定右端点,此时我们将当前矩形的左端点也向右移动,矩形的面积单调变小,直到举行面积再次小于K,停止移动。

那么我们怎么记录答案呢,可以发现每次移动右端点,再配合移动左端点,达到最终状态后,对于当前上下边界及左右边界的矩形而言,这次移动右端点所带来的贡献应该是 

右端点 - 左端点 + 1

因为对于现在这个右端点,向左看,从自身到右端点之间形成的矩形都是面积小于K的,因此贡献应该是左右端点之间的距离,几上面的式子

累加答案即位最终结果

代码 

#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std ; 

typedef long long LL ; 

const int N = 510 ; 
int n, m, k ; 
int g[N][N] ;

int main() 
{
    ios::sync_with_stdio(false) ; 
    cin >> n >> m >> k ; 
    for (int i = 1 ; i <= n ; i ++ ) 
        for (int j = 1 ; j <= m ; j ++ )
        {
            cin >> g[i][j] ; 
            g[i][j] += g[i - 1][j] ; // 按列前缀和
        }
        
    LL res = 0 ;
    for (int x = 1 ; x <= n ; x ++ ) // 枚举上界
        for (int y = x ; y <= n ; y ++ ) // 枚举下界
            for (int i = 1, j = 1, sum = 0 ; i <= m ; i ++ ) // i为右端点,j为左端点
            {
                sum += g[y][i] - g[x - 1][i] ; 
                while (sum > k && j < i) 
                {
                    sum -= g[y][j] - g[x - 1][j] ; 
                    j ++ ; 
                }
                
                if (sum <= k) res += i - j + 1 ;
            }
            
    cout << res << endl ;

    return 0 ; 
}

最后附送大家一个相似的练习题

 3487. 最小面积子矩阵 - AcWing题库

这里给出我的AC代码以供参考,思路很类似。

#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std ; 

const int N = 110, INF = 1e4 + 10 ; 
int g[N][N] ; 
int n, m, k ; 


int main() 
{
    ios::sync_with_stdio(false) ; 
    cin >> n >> m >> k ; 
    for (int i = 1 ; i <= n ; i ++ ) 
        for (int j = 1 ; j <= m ; j ++ ) 
        {
            cin >> g[i][j] ; 
            g[i][j] += g[i - 1][j] ;
        }
        
    int res = INF ; 
    for (int x = 1 ; x <= n ; x ++ ) 
        for (int y = x ; y <= n ; y ++ ) 
            for (int i = 1, j = 1, sum = 0 ; i <= m ; i ++ ) 
            {
                sum += g[y][i] - g[x - 1][i] ; 
                while (sum - g[y][j] + g[x - 1][j] >= k) 
                {
                    sum -= g[y][j] - g[x - 1][j] ; 
                    j ++ ; 
                }
                if (sum >= k) res = min(res, (y - x + 1) * (i - j + 1)) ;
            }
            
    if (res == INF) cout << -1 << endl ; 
    else cout << res << endl ;
    
    return 0 ; 
}

 

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

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

相关文章

利用Qgis进行WRF中土地利用数据的替换

一、地形数据来源&#xff1a;MCD12Q1_V006 1.1数据介绍&#xff1a; MODIS三级数据土地覆盖类型产品&#xff08;Land Cover data&#xff09;是根据一年的Terra和Aqua观测所得的数据经过处理&#xff0c;描述土地覆盖的类型&#xff0c;分辨率为500m。该土地覆盖数据集中包…

jdk、jre、jvm、javase、javaee

JDK Java开发工具包(Java Development Kit)。 开发者使用&#xff0c;里面除了JRE之外还包含java工具。 javac Java源程序编译器&#xff0c;将Java源代码转换成字节码。java Java解释器&#xff0c;直接从字节码文件&#xff0c;又称为类文件。执行Java应用程序的字节代码。…

运维必看|跨国公司几千员工稳定访问Office365,怎么实现?

【客户背景】本次分享的客户是全球传感器领域的领导者&#xff0c;其核心产品为电流和电压传感器&#xff0c;被广泛应用于驱动和焊接、可再利用能源以及电源、牵引、高精度、传统和新能源汽车等领域。 作为一家中等规模的全球化公司&#xff0c;该公司在北京、日本、西欧、东欧…

Spring事务管理(@Transactional使用)-官方原版

全面的事务支持是使用Spring的最令人信服的理由之一。 框架。Spring 框架为事务提供了一致的抽象 具有以下优势的管理&#xff1a;跨不同事务 API&#xff08;如 Java&#xff09;的一致编程模型 事务 API &#xff08;JTA&#xff09;、JDBC、Hibernate 和 Java Persistence A…

[docker]笔记-网络管理

1、docker网络原理 docker安装完成后&#xff0c;会在宿主机中创建一个虚拟网桥&#xff0c;用于容器之间和容器与外部网络的连接。虚拟网桥通常名称为docker0.可以使用ip link show命令进行查看&#xff1a; 在docker中&#xff0c;各个容器是通过这个docker0的虚拟网桥实现互…

IE自动跳转Edge?教你如何解决

本期看点&#xff1a; 最新windows10系统中, IE浏览器已经无法开启 取而代之是Edge浏览器 windows10默认不在安装IE浏览器 微软不在提供下载链接 而IE确实也存在一些安全隐患 大家非必要尽量避免使用IE浏览器 可选择使用Edge、Chrome、Firefox等 打开IE浏览器方式一&am…

laravel与workerman结合

安装workerman composer require workerman/workerman生成命令 php artisan make:command Workerman<?phpnamespace App\Console\Commands;use Illuminate\Console\Command; use Workerman\Worker;class Workerman extends Command {/*** The name and signature of the …

2022年度商业关键词调研报告(小红书美妆个护)

美妆个护&#xff0c;作为小红书最火热的领域之一&#xff0c;不断塑造流行新趋势&#xff0c;大量品牌在小红书孵化爆品&#xff0c;崛起破圈。回顾2022年&#xff0c;小红书美妆个护领域有哪些热门新趋势呢&#xff1f; 由此&#xff0c;千瓜推出《2022年度商业关键词调研报告…

机器学习-基于KNN及其改进的汉字图像识别系统

一、简介和环境准备 knn一般指邻近算法。 邻近算法&#xff0c;或者说K最邻近&#xff08;KNN&#xff0c;K-NearestNeighbor&#xff09;分类算法是数据挖掘分类技术中最简单的方法之一。而lmknn是局部均值k最近邻分类算法。 本次实验环境需要用的是Google Colab和Google Dr…

ASEMI高压MOS管60R380参数,60R380特征,60R380应用

编辑-Z ASEMI高压MOS管60R380参数&#xff1a; 型号&#xff1a;60R380 漏极-源极电压&#xff08;VDS&#xff09;&#xff1a;600V 栅源电压&#xff08;VGS&#xff09;&#xff1a;20V 漏极电流&#xff08;ID&#xff09;&#xff1a;11A 功耗&#xff08;PD&#x…

Python的PyQt框架的使用-资源文件夹的使用

Python的PyQt框架的使用-资源文件夹的使用一、前言二、Qt Designer加载资源文件三、资源文件的转换一、前言 个人主页: ζ小菜鸡大家好我是ζ小菜鸡&#xff0c;小伙伴们&#xff0c;让我们一起来学习Python的PyQt框架的使用。如果文章对你有帮助、欢迎关注、点赞、收藏(一键三…

win10怎么取消开机密码?电脑小白也可以轻松掌握的3种方法

为了保护隐私&#xff0c;我们大多喜欢给自己的电脑“上锁”&#xff0c;即设置开机密码。有时候&#xff0c;我们想要取消电脑的开机密码&#xff0c;却不知有什么方法可以帮到我们。win10怎么取消开机密码&#xff1f;方法有很多。 比如&#xff1a;通过运行来进入用户账户设…

Golang学习Day1

&#x1f60b; 大家好&#xff0c;我是YAy_17&#xff0c;是一枚爱好网安的小白。本人水平有限&#xff0c;欢迎各位大佬指点&#xff0c;欢迎关注 &#x1f601;&#xff0c;一起学习 &#x1f497; &#xff0c;一起进步 ⭐ 。⭐ 此后如竟没有炬火&#xff0c;我便是唯一的光…

GEE学习笔记 五十一:Fusion Table将在2019年12月3日关闭

刚刚看到的一则消息&#xff0c;Google运行了9年之久的Fusion Table将在2019年12月3日关闭相关服务&#xff0c;同时也就是未来Google Earth Engine&#xff08;GEE&#xff09;上将不会存在Fusion Table这一数据&#xff0c;GEE官方也不再建议用户使用Fusion Table数据。 目前…

anaconda:安装cuda和对应版本的cudnn

复现别人论文的时候经常遇到不同的cuda版本&#xff0c;可以使用anaconda创建虚拟环境&#xff0c;并在不同的虚拟环境中配置对应的cuda版本 1、安装anaconda及虚拟环境使用 Anaconda多个python版本&#xff08;python2.7 & python3.8&#xff09; 2、安装cuda和对应版本…

【机器学习】噪声数据的理解

文章目录一、噪声数据1.1 分箱1.2 回归1.3 聚类1.4 其他二、数据清理作为一个过程2.1 偏差检测2.1.1 使用“元数据”&#xff1a;关于数据的数据2.1.2 编码格式&#xff1a;存在使用不一致、数据表示不一致2.1.3 字段过载2.1.4 唯一性规则2.1.5 连续性规则2.1.6 空值规则2.2 数…

爆赞!首次公布阿里Java成长路线,Github访问量突破80万

作为程序员&#xff0c;进大厂是大多数人的梦想&#xff0c;进大厂的好处也如下图一样&#xff1a; 有面儿&#xff0c;不易失业。牛人多&#xff0c;培训多&#xff0c;成长更快。钱多。有较为完善的晋升规则。站在巨人肩膀人&#xff0c;眼界开阔更何况程序员不同于其他行业…

zabbix4.0安装部署

目录 1.1、添加 Zabbix 软件仓库 1.2、安装 Server/proxy/前端 1.3、创建数据库 1.4、导入数据 1.5、为 Zabbix server/proxy 配置数据库 1.6、 启动 Zabbix server 进程 1.7、zabbix前端配置 SELinux 配置 1.8、安装 Agent 1.9、启动zabbix 2.0、访问zabbix 1.1、添加…

【图像处理OpenCV(C++版)】——4.6 限制对比度的自适应直方图均衡化

前言&#xff1a; &#x1f60a;&#x1f60a;&#x1f60a;欢迎来到本博客&#x1f60a;&#x1f60a;&#x1f60a; &#x1f31f;&#x1f31f;&#x1f31f; 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义&#xff0c;适用于平时学习、工作快…

使用FORCE训练的脉冲神经网络中的监督学习(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 1.1 脉冲神经网络简介 脉冲神经网络 (SNN) 属于第三代神经网络模型&#xff0c;实现了更高级的生物神经模拟水平。除了神经元和…