洛谷 P8783 [蓝桥杯 2022 省 B] 统计子矩阵
题目描述
给定一个 N×M 的矩阵 A,请你统计有多少个子矩阵 (最小 1×11×1, 最大 N×M 满足子矩阵中所有数的和不超过给定的整数 K。
输入格式
第一行包含三个整数 N,M 和 K。
之后 N 行每行包含 M 个整数, 代表矩阵 A。
输出格式
一个整数代表答案。
输入输出样例
输入 #1
3 4 10 1 2 3 4 5 6 7 8 9 10 11 12
输出 #1
19
说明/提示
【样例说明】
满足条件的子矩阵一共有 1919,包含:
大小为 1×11×1 的有 1010 个。
大小为 1×21×2 的有 33 个。 大小为 1×31×3 的有 22 个。
大小为 1×41×4 的有 11 个。
大小为 2×12×1 的有 33 个。
【评测用例规模与约定】
对于 30% 的数据, N,M≤20.
对于 70% 的数据, N,M≤100.
对于 100% 的数据, 1≤N,M≤500,0≤Aij≤1000,1≤K≤2.5×1e8.
蓝桥杯 2022 省赛 B 组 F 题。
看到要求矩阵和我们首先想到二位前缀和,先想出我们的暴力方法:首先预处理得出二位前缀和数组,然后枚举左上角,对每一个左上角都去枚举右下角,根据我们的前缀和方程求得当前这个矩阵的和值是多少,和我们的k值比较即可。当然这样肯定超时,我们可以很轻松的想出第一个优化:比如我枚举了右下角在第一行的矩阵之后,已经找到一个大于k值的矩阵,那么我第二行就不要再包括他了。我们可以设置一个随着枚举而更新的maxc记录这个值,这个方案可以大大缩短我们的程序运行时间,代码如下:
#include<bits/stdc++.h>
using namespace std;
#define int long longint a[505][505] = { 0 };
int s[505][505] = { 0 };signed main()
{int n, m, k;cin >> n >> m >> k;for (int i = 1;i <= n;i++){for (int j = 1;j <= m;j++){cin >> a[i][j];s[i][j] += s[i][j - 1] + s[i - 1][j] - s[i - 1][j - 1] + a[i][j];}}int ans = 0;for (int i = 1;i <= n;i++){for (int j = 1;j <= m;j++){//以上两个循环枚举左上角int maxc = m + 1;for (int r = i;r <= n;r++){for (int c = j; c < maxc;c++){//枚举右下角if (s[r][c] - s[i - 1][c] - s[r][j - 1] + s[i - 1][j - 1] > k){maxc = c;break;}else ans++;}}}}cout << ans;return 0;
}
不过就算这样,还是有两个点过不了,只能拿80分。虽然是优化过的,但我们这个方法的本质依然是枚举左上角与右下角,复杂度还是太高:o(m^2*n^2)。第二个优化我是想不出来了,这也代表了我们这样用二位前缀和,只能拿部分分。
看了题解,了解到第二种方法,当然还是建立在前缀和的基础上:我们不在枚举左上角与右下角,而是转为枚举行的范围:这是一个o(n^2)的操作。然后我们使用一个双指针去遍历这个范围,就像是把二维问题降维成一维一样: 有一个序列 [1,3,4,3],试求出其中有多少个子序列,满足该子序列的所有元素之和小于等于 10。具体思路参考:P8783 题解 - 洛谷专栏 (luogu.com.cn)
有一个需要解释的点,关于ans为什么等于r-l+1:比如一开始我们l是1,r是2,sum,也就是和值=3,小于我们的k值。此时我们就可以被r++,那么相应的,ans,也就是子矩阵(放在这里就是连续子序列的个数)增加了多少呢?方案从“1,2,12”变成了“1,2,3,12,23,123”,可以自己模拟一下,会发现原来的数列里所有以i(1<=i<x,x为当前增加的数)为开头,以原本的最后一位为结尾的方案都会作为新加入的数的方案之一(也就是上面例子的23和123,都是新方案),再加上这个数本身, 就是r-l+1。
代码如下:
#include<bits/stdc++.h>
using namespace std;
#define int long longint a[505][505] = { 0 };
int s[505][505] = { 0 };signed main()
{int n, m, k;cin >> n >> m >> k;for (int i = 1;i <= n;i++){for (int j = 1;j <= m;j++){cin >> a[i][j];s[i][j] += s[i][j - 1] + s[i - 1][j] - s[i - 1][j - 1] + a[i][j];}}int ans = 0;for (int i = 1;i <= n;i++){for (int j = i;j <= n;j++){//以上两个循环枚举两条线int l, r;l = r = 1;while (r <= m)//双指针{if (s[j][r] - s[j][l - 1] - s[i - 1][r] + s[i - 1][l - 1] <= k){ans += r - l + 1;r++;}else l++;}}}cout << ans;return 0;
}
相关文章:
洛谷 P8783 [蓝桥杯 2022 省 B] 统计子矩阵
题目描述 给定一个 NM 的矩阵 A,请你统计有多少个子矩阵 (最小 1111, 最大 NM 满足子矩阵中所有数的和不超过给定的整数 K。 输入格式 第一行包含三个整数 N,M 和 K。 之后 N 行每行包含 M 个整数, 代表矩阵 A。 输出格式 一个整数代表答案。 输入输出样例 …...
Rust 实战练习 - 8. 内存,ASM,外挂 【重磅】
目标: C写一个Demo版本的游戏由浅入深,了解外挂原理Linux/Android下实现内存读取ptrace实现内存修改(依赖第三方库) 先准备一个C写的小游戏 #include <stdio.h> #include <string.h>struct Role {float pos_x; // …...
XUbuntu22.04之Typora快捷键Ctrl+5不生效问题(二百二十六)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...
GRE_MGRE综合实验
目录 1、R5为ISP,只能进行IP地址配置,其所有地址均配为公有IP地址。 IP配置 配置公网全网通 2、(1)R1和R5间使用PPP的PAP认证,R5为主认证方。 PAP认证 (2)R2与R5之间使用ppp的CHAP认证&am…...
把组合损失中的权重设置为可学习参数
目前的需求是:有一个模型,准备使用组合损失,其中有2个或者多个损失函数。准备对其进行加权并线性叠加。但想让这些权重进行自我学习,更新迭代成最优加权组合。 目录 1、构建组合损失类 2、调用组合损失类 3、为其构建优化器 …...
用Bat启动jar程序
前情提要:在使用冰蝎、哥斯拉等一些列工具时(PS:一系列需要利用Java环境并打开的jar),我就在想能不能写一段代码点一下,就能打开程序而不用去输入命令 echo off echo 程序启动中... start javaw -noverif…...
网站维护页404源码
网站维护页404源码,布局简洁,上传即可使用。 网站维护页404源码...
jmeter链路压测
比如登录后返回token,业务打印上传的操作需要用到token 线程组中添加登录请求,并执行 1、添加登录并执行,查看结果 2、结果树中下拉选择正则表达式,将token参数和值复制粘贴到下方,将token值改为(.*?)࿰…...
香港服务器怎么看是CN2 GT线路还是CN2 GIA线路?
不知道有没有小伙伴们注意过,很多人在租用香港服务器的时候都习惯性选择 CN2 线路?仿佛香港服务器是否采用 CN2 线路成为个人企业选择香港服务器的一个标准。其实,香港服务器有CN2、优化直连(163)、BGP多线(包含了国际和国内线路),…...
CrossOver软件2024免费 最新版本详细介绍 CrossOver软件好用吗 Mac电脑玩Windows游戏
CrossOver是一款由CodeWeavers公司开发的软件,它可以在Mac和Linux等操作系统上运行Windows软件,而无需在计算机上安装Windows操作系统。这款软件的核心技术是Wine,它是一种在Linux和macOS等操作系统上运行Windows应用程序的开源软件。 Cross…...
harbor api v2.0
harbor api v2.0 v2.0 v2.0 “harbor api v2.0”与原来区别较大,此处harbor也做了https。另外,通过接口拿到的数据也是只能默认1页10个,所以脚本根据实际情况一页页的抓取数据 脚本主要用于统计repo、image,以及所有镜像的tag数&…...
Vue 表单数据双向绑定 v-mode
每一个Vue项目,每一个系统,肯定涉及到表单的双向数据绑定问题,这一部分是 vue 的重中之重,不是因为知识点复杂,而是因为只要参与 vue 项目的开发,那么就必不可少。 单项绑定 :数据变࿰…...
tab切换组件,可横向自适应滑动
示例图: 注:需要引入Jquery <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>.tabs-box {width: 100%;height: auto;}.tab-header-box {display: flex;overflow: hidden…...
设计模式---单例模式
目录 一、五种单例模式的实现方式 1.饿汉模式 2.饿汉枚举类型 3.懒汉式 4.双检锁懒汉式 5.内部类懒汉式 二、JDK 中单例的体现 一、五种单例模式的实现方式 1.饿汉模式 public class Singleton1 implements Serializable {private Singleton1() {if (INSTANCE ! null) {thro…...
HarmonyOS 应用开发之启动/停止本地PageAbility
启动本地PageAbility PageAbility相关的能力通过featureAbility提供,启动本地Ability通过featureAbility中的startAbility接口实现。 表1 featureAbility接口说明 接口名接口描述startAbility(parameter: StartAbilityParameter)启动Ability。startAbilityForRes…...
BaseDao封装增删改查
文章目录 什么是BaseDao操作代码增删改查询单个数据查询多个数据 总结 什么是BaseDao BaseDao是: 数据库里负责增加,删除,修改,查询 具体来说是一种接口代码,公共方法的接口类。 在dao层新建basedao,其他dao层接口继承basedao 相…...
Redis入门到实战-第十三弹
Redis入门到实战 Redis中JSON数据类型常见操作官网地址Redis概述JSON常见操作更新计划 Redis中JSON数据类型常见操作 完整命令参考官网 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://redis.io/Redis概述 Redis是…...
深度学习InputStreamReader类
咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好…...
2023年后端面试总结
备注:这篇文章是我在2023年年初在自己的网站上写的,最近在迁移技术文章,我感觉这个也是和咱程序员相关,所以今天就决定把它迁移过来。 .......................................................................分割线..........…...
axios实现前后端通信报错Unsupported Media
使用axios向SpringBoot的后端使用post请求发送数据,发现报错Unsupported Media,最终解决方案如下: 检查变量名字是否一样,即前端传给后端的json数据键名要与后端接收的对象的成员变量名字一致检查Content-Type,post请…...
网络套接字补充——TCP网络编程
六、TCP网络编程 6.1IP地址字符串和整数之间的转换接口 //字符串转整数接口 #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> int inet_aton(const char *cp, struct in_addr *inp); int inet_pton(int af, const char *strptr, …...
Nginx-记
Nginx是一个高性能的web服务器和反向代理服务器,用于HTTP、HTTPS、SMTP、POP3和IMAP协议。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。 (1)更快 这表现在两个方面:一方面,在正常情况下&…...
JS面试题:call,apply,bind区别
1. 共同点 三者共同点都是改变函数内部this指向的方法 2. call用法 ini 复制代码 var a 2; var b 2; function func() { console.log(this.a, this.b) } let obj { a: 1, b: 1 } func.call(obj) func.call() 输出结果: 复制代码 1 1 2 2 解析࿱…...
Charles抓包配置代理手机连接
Charles下载地址: Charles_100519.zip官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘123云盘为您提供Charles_100519.zip最新版正式版官方版绿色版下载,Charles_100519.zip安卓版手机版apk免费下载安装到手机,支持电脑端一键快捷安装https://www.123pan.com…...
NA555、NE555、SA555和SE555系列精密定时器
这份文件是关于德州仪器(Texas Instruments)生产的NA555、NE555、SA555和SE555系列精密定时器(Precision Timers)的数据手册。以下是该文件的核心内容概述: 产品特性: 德州仪器的NA555、NE555、SA555和SE55…...
黑马鸿蒙笔记2
1.图片设置: 1 加载网络图片,申请权限。 申请权限:entry - src - resources - module.json5 2 加载本地图片 ,两种加载方式 API 鼠标悬停在Image, 点击show in API Reference interpolation:看起来更加清晰 resou…...
微信小程序uniapp+vue3+ts+pinia的环境搭建
一.创建uniapp项目 通过vue-cli创建 npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project二.安装依赖: 1.pnpm i 2.运行项目: 将package.json的 "dev:mp-weixin": "uni -p mp-weixin",改为 "serve": "u…...
MongoDB聚合运算符:$let
文章目录 MongoDB聚合运算符:$let语法使用举例 MongoDB聚合运算符:$let $let聚合运算符绑定用于表示计算的变量,并返回表达式的结果。 语法 {$let:{vars: { <var1>: <expression>, ... },in: <expression>} }vars 用于在…...
HarmonyOS像素转换-如何使用像素单位设置组件的尺寸。
1 卡片介绍 基于像素单位,展示了像素单位的基本知识与像素转换API的使用。 2 标题 像素转换(ArkTS) 3 介绍 本篇Codelab介绍像素单位的基本知识与像素单位转换API的使用。通过像素转换案例,向开发者讲解了如何使用像素单位设…...
【前端面试3+1】05v-if和v-show的区别、v-if和v-for能同时使用吗、Vuex是什么?【合并两个有序链表】
一、v-if和v-show的区别 v-if 和 v-show 是 Vue.js 中用来控制元素显示与隐藏的指令。 1.v-if: v-if 是根据表达式的真假值来决定是否渲染元素。当表达式为真时,元素会被渲染到 DOM 中;当表达式为假时,元素不会被渲染到 DOM 中。每…...
做网站建设一年能赚多少/百度网络营销中心
之前的两篇文章我们了解了委托和事件,本文我们看一下线程。 1,一个窗体程序,默认拥有一个线程(相当于一个商店里面,只有一个店员),这个默认的线程叫做 UI线程/主线程。 2,进程和线程…...
网站上线要准备什么/会计培训
登录时的填写密码显示文本或者显示黑点切换其实就是两个div的v-if/else判断; 下面详细说下具体实现过程;(附代码图) 第一步: 默认密码显示的是黑点: 显示密码文本: 代码部分这样写: 红线框圈住…...
濮阳网站建设在哪做/临沂百度联系方式
Hive的简单应用 参考一下此文章 Hive详细介绍及简单应用...
深圳网站维护页面设计/南阳seo优化
lambda 函数是一个可以接收任意多个参数(包括可选参数)并且返回单个表 达式值的函数 1、lambda 函数比较轻便,即用即仍,很适合需要完成一项功能,但是此功能只 在此一处使用,连名字都很随意的情况下; 2、匿名函数&a…...
企业大型网站开发设计建站流程/开鲁网站seo免费版
近日,一项新的测量方法证实了 2010 年的发现:质子比之前认为的要小。2013 年用量子显微镜拍摄的氢原子电子轨道图。近十年来,物理学家们一直试图用氢原子来解决在质子半径上的相互矛盾的实验结果。图|氢原子电子轨道图(来源&#…...
网站怎么做微信扫描登录网站/whois查询 站长工具
一、修改Flex builder 1.用无格式编辑器打开FlashBuilder.ini 2.把zh_CN替换成"en_US" 二、修改MyEclipse插件 1.用无格式编辑器打开MyEclipse8.5\configuration\config.ini 2.最后添加osgi.nlen_US 三、修改Eclipse插件 1.用无格式编辑器打开eclipse.ini 2.顶部加入…...