蓝桥备赛——矩阵读入

news2024/11/26 2:27:39

题目描述 

如上图所示,是一道有关二维前缀和的问题,因为涉及到二维,肯定就是以矩阵的形式进行读入的。

为此,针对矩阵的读入形式进行总结,可以大致总结出两种类型如下:

二维列表推导式

n, m, k = map(int, input().split())
mat = []
for i in range(n):
    mat.append(list(map(int, input().split())))
pre = [[0 for _ in range(m)] for _ in range(n + 1)]
for i in range(1, n + 1):
    for j in range(m):
        pre[i][j] = pre[i - 1][j] + mat[i - 1][j]

 可以看到上面代码的

pre = [[0 for _ in range(m)] for _ in range(n + 1)]

表示的是对于第一个[ ]中的元素是生成一个行向量,对于外面的第二个[ ]表示的是生成多少行的列表。

经过上面的代码,可以获得一个列表为

即获得了一个所有元素都为0的列表。后面再不停地读入元素进行原内容覆盖。

自创的方法

n,m,k=map(int,input().split())
mas=[]
for i in range(n):
    matrix = []
    matrix.extend(map(int,input().split()))
    mas.append(matrix)
print(mas)

 同样是先读入数据,不过需要额外创建一个列表作为中转,将数据读入后,再将其作为整体append到一个新的列表,即可达到上面二维列表推导式的效果。

与上面方法不同的地方是,不需要再重新将元素全部覆盖,所录入列表的即为最终数据。

AC Code

n, m, k = map(int, input().split())
mat = []
for i in range(n):
    mat.append(list(map(int, input().split())))
pre = [[0 for _ in range(m)] for _ in range(n + 1)]
for i in range(1, n + 1):
    for j in range(m):
        pre[i][j] = pre[i - 1][j] + mat[i - 1][j]
ans = 0
for i in range(n):
    for j in range(i, n):
        l, r, sum = 0, 0, 0
        while r < m:
            sum += pre[j + 1][r] - pre[i][r]
            while sum > k:
                sum -= pre[j + 1][l] - pre[i][l]
                l += 1
            ans += r - l + 1
            r += 1
print(ans)

现在来解释一下上面的代码

n, m, k = map(int, input().split())
mat = []
for i in range(n):
    mat.append(list(map(int, input().split())))
pre = [[0 for _ in range(m)] for _ in range(n + 1)]
for i in range(1, n + 1):
    for j in range(m):
        pre[i][j] = pre[i - 1][j] + mat[i - 1][j]

这块代码的作用就是读入相关数据

ans = 0
for i in range(n):
    for j in range(i, n):
        l, r, sum = 0, 0, 0
        while r < m:
            sum += pre[j + 1][r] - pre[i][r]
            while sum > k:
                sum -= pre[j + 1][l] - pre[i][l]
                l += 1
            ans += r - l + 1
            r += 1
print(ans)

上面代码的作用就是对应:

for i in range(1, n + 1): for j in range(m): pre[i][j] = pre[i - 1][j] + mat[i - 1][j]:计算前缀和矩阵pre。对于pre[i][j],表示原始矩阵中第i-1行(因为前缀和矩阵行数比原始矩阵多了1)以及前j列的元素之和。

ans = 0:初始化变量ans,用于记录满足条件的子矩阵数量。

for i in range(n): for j in range(i, n)::遍历所有可能的子矩阵的上边界i和下边界j

l, r, sum = 0, 0, 0:初始化左边界l、右边界r以及子矩阵元素之和sum

while r < m: sum += pre[j + 1][r] - pre[i][r]:在子矩阵的右边界r小于列数m时,计算子矩阵在当前列的元素之和。

while sum > k: sum -= pre[j + 1][l] - pre[i][l] l += 1:如果子矩阵的元素之和超过了限定值k,则移动左边界l,直到子矩阵的元素之和不再超过k

ans += r - l + 1:更新满足条件的子矩阵数量。

r += 1:向右移动子矩阵的右边界r

print(ans):输出满足条件的子矩阵数量。

该算法的时间复杂度为O(n^3 * m),因为有三层嵌套循环分别遍历行、列和子矩阵。

 

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

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

相关文章

HTML教程(详细汇总)

目录 前言&#xff1a; Sublime Text(收费): VS Code(免费): HBuilderX(免费): Dreamweaver(免费): Webstorm(收费): 一.网站的概念&#xff1a; 1.什么是网页&#xff1a; 2.什么是网站&#xff1a; 3.服务器&#xff1a; 总结&#xff1a; 二.HTML简介&#xff…

【JavaEE初阶系列】——CAS

目录 &#x1f388;什么是 CAS &#x1f4dd;CAS 伪代码 &#x1f388;CAS 是怎么实现的 &#x1f388;CAS 有哪些应用 &#x1f6a9;实现原子类 &#x1f308;伪代码实现: &#x1f6a9;实现自旋锁 &#x1f308;自旋锁伪代码 &#x1f388;CAS 的 ABA 问题 &#…

黄金票据制作-新手向

黄金票据制作 文章目录 黄金票据制作0x01 前言0x02 黄金票据的制作一、靶场搭建二、收集制作信息获取域名称获取域SID值获取域用户krbtgt密码hash值 二、制作票据 0x03 验证票据有效性 0x01 前言 最近&#xff0c;我学习了内网渗透的相关知识&#xff0c;其中包括了黄金票据的…

浏览器页面缓存机制

HTTP缓存机制的核心思想是&#xff0c;对于已经请求过的资源&#xff0c;如果其在服务器上没有发生变化&#xff0c;那么浏览器就可以直接从本地缓存中获取这些资源&#xff0c;而无需再次向服务器发送请求。 强缓存 就是确定可用的缓存 浏览器和和服务器对每个缓存资源先商量一…

fread和fwirte函数

✨✨ 欢迎大家来到莉莉的博文✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 一、fread函数 ——>从文件流中读取二进制数据到ptr指向的数组 从流&#xff08;二进制文件&#xff09;中读取数据块 ptr&#xff1a;指向大小至…

基于JSP在线订花系统

基于JSP在线订花系统的设计与实现 摘要 近年来&#xff0c;随着人们对于生活品质的重视度日益提升&#xff0c;鲜花的需求量也在不断增加同时带动了鲜花电商的飞速发展和应用&#xff0c;平台化的鲜花交易模式也逐渐从传统的鲜花销售转型为个性化鲜花定制。同时随着鲜花速递行…

基于 RisingWave 和 ScyllaDB 构建事件驱动应用

概览 在构建事件驱动应用时&#xff0c;人们面临着两大挑战&#xff1a;1&#xff09;低延迟处理大量数据&#xff1b;2&#xff09;实现流数据的实时摄取和转换。 结合 RisingWave 的流处理功能和 ScyllaDB 的高性能 NoSQL 数据库&#xff0c;可为构建事件驱动应用和数据管道…

MTMT:构建比特币生态平行世界 打造铭文生态繁荣

近年来&#xff0c;随着铭文市场的火爆以及比特币ETF成功通过&#xff0c;比特币生态正经历着一场复兴&#xff0c;尤其是铭文市场作为新一代Web3的叙事&#xff0c;带来了全新的生产方式&#xff0c;可以预见&#xff0c;铭文就像流动性挖矿对于上一轮DeFi Summer的推动一样会…

KNN算法 | K近邻:KD Tree、球树、KNN数据下采样策略

目录 一. KNN算法实现方式1. 蛮力实现(brute)2. KD树(kd_tree)3. 球树(ball_tree) 二. KD Tree算法1. 构建方式2. KD Tree 查找最近邻 三. 球树(Ball Tree)1. 构建方式 四. KNN评价1. 优点2. 缺点 五. 延申1. KNN数据下采样策略策略1策略2策略3策略4 Condensed Nearest Neighbo…

Macs Fan Control Pro--精准掌控Mac风扇,优化散热新选择

Macs Fan Control Pro是一款专为Mac电脑设计的高级风扇控制工具。它具备强大的温度监测能力&#xff0c;可以实时监测Mac电脑各个核心组件的温度&#xff0c;并通过直观的界面展示给用户。同时&#xff0c;用户可以根据个人需求自定义风扇速度&#xff0c;或者选择预设的自动风…

蓝桥杯算法题-图形排版

题目描述 小明需要在一篇文档中加入 N 张图片&#xff0c;其中第 i 张图片的宽度是 Wi&#xff0c;高度是 Hi。   假设纸张的宽度是 M&#xff0c;小明使用的文档编辑工具会用以下方式对图片进行自动排版&#xff1a; 1. 该工具会按照图片顺序&#xff0c;在宽度 M 以内&…

LabVIEW转动设备故障诊断系统

LabVIEW转动设备故障诊断系统 随着工业自动化技术的不断进步&#xff0c;转动设备在电力、化工、船舶等多个行业中扮演着越来越重要的角色。然而&#xff0c;这些设备在长期运行过程中难免会出现故障&#xff0c;如果不能及时诊断和处理&#xff0c;将会导致生产效率下降&…

【JavaSE】一维数组和二维数组详解

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 一维数组 基本语法 初始化 遍历和打印 数组是引用型变量 基本类型变量与引用类型变量的区别 null 数组传参和返回 总结 二维数组 基本语法 初始化 遍历和打印 一维数组…

排序——非基于比较的排序

本专栏和大家分享关于排序的算法,其中有插入排&#xff08;直接插入排序和希尔排序&#xff09;、选择排序&#xff08;直接选择排序和堆排&#xff09;、交换排序&#xff08;冒泡排序和快速排序&#xff09;、归并排序以及其他非基于比较的排序 本文与大家分享非基于比较的排…

透视未来安全:PIR技术引领数据隐私新时代

1.隐语实现PIR总体介绍 隐语实现的Private Information Retrieval (PIR) 是一种隐私增强技术&#xff0c;它使用户能够在不暴露他们实际查询内容的情况下从远程服务器数据库中检索所需信息。以下是隐语在实现PIR方面的概要说明和技术特点&#xff1a; 基本概念&#xff1a; PI…

移动硬盘无法读取打不开?原因分析与解决方案

一、移动硬盘遭遇困境&#xff1a;无法读取打不开 在数字信息爆炸的时代&#xff0c;移动硬盘成为了我们储存和传输数据的重要工具。然而&#xff0c;当移动硬盘突然无法读取打不开时&#xff0c;我们往往会感到手足无措。插入电脑后&#xff0c;移动硬盘的指示灯可能正常闪烁…

算法系列--动态规划--特殊的状态表示--分析重复子问题

&#x1f495;"轻舟已过万重山!"&#x1f495; 作者&#xff1a;Lvzi 文章主要内容&#xff1a;算法系列–算法系列–动态规划–特殊的状态表示–分析重复子问题 大家好,今天为大家带来的是算法系列--动态规划--特殊的状态表示--分析重复子问题 一.组合总数IV 链接…

dubbo下

dubbo 集成springboot 配置文件 controller 启动类 注册中心宕机 负载均衡 zookeeper注册中心 dubbo原理 dubbo架构 各层说明 增强spi原理

Native Instruments Kontakt 7 for Mac v7.9.0 专业音频采样

Native Instruments Kontakt 7是一款强大的软件采样器&#xff0c;它允许用户从各种来源采样音频并进行编辑和处理。它包含大量预设采样库&#xff0c;包括乐器、合成器、鼓组和声音效果等。此外&#xff0c;Kontakt 7还允许用户创建自己的采样库&#xff0c;以便根据自己的需要…

2-Prometheus监控主机

1 介绍 Prometheus 使用 node_exporter 服务程序监控 Linux 主机。 2 部署 2.1 下载 官方下载地址 https://prometheus.io/download/ 找到 node-export 下载即可 curl -o node-exporter.tar.gz -L https://github.com/prometheus/node_exporter/releases/download/v1.7.0/…