(蓝桥杯)二维数组前缀和典型例题——子矩阵求和

题目描述

小 A 同学有着很强的计算能力,张老师为了检验小 AA同学的计算能力,写了一个 n 行 m 列的矩阵数列。

张老师问了小 A 同学 k 个问题,每个问题会先告知小 A 同学 4 个数 x1,y1,x2,y2画出一个子矩阵,张老师请小 A同学计算出这个子矩阵中所有数的和。

请你编程帮助张老师计算出结果。

输入

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

接下来 n 行,每行包含 m 个整数。

接下来 k 行,每行包含四个整数 x1​,y1​,x2​,y2​,表示一组询问。

数据范围

1≤n,m≤1000。

1≤k≤200000。

1≤x1​≤x2​≤n,≤y1​≤y2​≤m。

矩阵内元素的值均在 [−1000,1000] 的范围内。

输出

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

样例

输入:

3 5 4
1 1 6 7 4
6 10 4 9 9
2 6 7 3 7
1 2 2 4
2 4 3 5
2 2 3 5
1 3 2 4

输出:

37
28
55
26

知识点

1.二维数组前缀和

 2、python输入输出优化

问题: 这是第一版的代码 老是运行超时

解法:因为 Python 的 input()print() 在大量数据时可能会比较慢。我们可以使用 sys.stdin.readline() 来代替 input(),并使用 sys.stdout.write() 来代替 print(),以减少 I/O 操作的时间开销。

输入优化:使用 sys.stdin.readline() 代替 input(),这样可以更快地读取输入数据。

输出优化:使用 sys.stdout.write() 代替 print(),这样可以更快地输出结果。注意 sys.stdout.write() 不会自动添加换行符,所以需要手动添加 \n

 输入优化:使用 sys.stdin.readline() 代替 input()

在 Python 中,input() 函数用于从标准输入读取一行数据,并返回一个字符串。虽然 input() 使用起来非常方便,但在处理大量输入数据时,它的性能可能会比较差。这是因为 input() 函数在内部进行了一些额外的处理,比如处理换行符、缓冲区管理等。

sys.stdin.readline() 是一个更底层的输入函数,它直接从标准输入读取一行数据,并返回一个字符串,包括行尾的换行符。使用 sys.stdin.readline() 可以减少一些不必要的处理,从而提高输入的效率。

示例

import sys# 使用 input() 读取一行数据
line = input().strip()  # strip() 用于去除行尾的换行符# 使用 sys.stdin.readline() 读取一行数据
line = sys.stdin.readline().strip()  # 同样需要 strip() 去除行尾的换行符

输出优化:使用 sys.stdout.write() 代替 print()

print() 函数用于将数据输出到标准输出,并自动添加换行符。虽然 print() 使用起来非常方便,但在处理大量输出数据时,它的性能可能会比较差。这是因为 print() 函数在内部进行了一些额外的处理,比如格式化输出、换行符管理等。

sys.stdout.write() 是一个更底层的输出函数,它直接将字符串写入标准输出,不会自动添加换行符。使用 sys.stdout.write() 可以减少一些不必要的处理,从而提高输出的效率。

示例

import sys# 使用 print() 输出数据
print("Hello, World!")# 使用 sys.stdout.write() 输出数据
sys.stdout.write("Hello, World!\n")  # 需要手动添加换行符

性能对比

在处理大量数据时,使用 sys.stdin.readline()sys.stdout.write() 可以显著提高程序的运行效率。以下是一个简单的性能对比示例:

使用 input()print()

使用 sys.stdin.readline()sys.stdout.write()

import time
import sysstart_time = time.time()for _ in range(1000000):line = sys.stdin.readline().strip()sys.stdout.write(line + '\n')end_time = time.time()
print("Time taken:", end_time - start_time)

代码

代码1

n, m, k = map(int, input().split())
a = []
for i in range(n):a.append(list(map(int, input().split())))
b = []
for i in range(k):b.append(list(map(int, input().split())))
c = [[0] * (m + 1) for i in range(n + 1)]
for i in range(1, n + 1):for j in range(1, m + 1):c[i][j] = c[i - 1][j] + c[i][j - 1] - c[i - 1][j - 1] + a[i - 1][j - 1]
for i in range(k):x1, y1, x2, y2 = b[i][0], b[i][1], b[i][2], b[i][3]print(c[x2][y2] - c[x1 - 1][y2] - c[x2][y1 - 1] + c[x1 - 1][y1 - 1])

代码2

import sys# 使用 sys.stdin.readline() 读取输入
n, m, k = map(int, sys.stdin.readline().split())
a = []
for i in range(n):a.append(list(map(int, sys.stdin.readline().split())))
b = []
for i in range(k):b.append(list(map(int, sys.stdin.readline().split())))# 构建前缀和数组
c = [[0] * (m + 1) for i in range(n + 1)]
for i in range(1, n + 1):for j in range(1, m + 1):c[i][j] = c[i - 1][j] + c[i][j - 1] - c[i - 1][j - 1] + a[i - 1][j - 1]# 使用 sys.stdout.write() 输出结果
for i in range(k):x1, y1, x2, y2 = b[i][0], b[i][1], b[i][2], b[i][3]sys.stdout.write(str(c[x2][y2] - c[x1 - 1][y2] - c[x2][y1 - 1] + c[x1 - 1][y1 - 1]) + '\n')

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

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

相关文章

Node.js - HTTP

1. HTTP请求 HTTP(Hypertext Transfer Protocol,超文本传输协议)是客户端和服务器之间通信的基础协议。HTTP 请求是由客户端(通常是浏览器、手机应用或其他网络工具)发送给服务器的消息,用来请求资源或执行…

[读书日志]8051软核处理器设计实战(基于FPGA)第七篇:8051软核处理器的测试(verilog+C)

6. 8051软核处理器的验证和使用 为了充分测试8051的性能,我们需要测试每一条指令。在HELLO文件夹中存放了整个测试的C语言工程文件。主函数存放在指令被分为五大类,和上面一样。 打开后是这样的文件结构。HELLO.c是主文件,这是里面的代码&am…

深入浅出 Android AES 加密解密:从理论到实战

深入浅出 Android AES 加密解密:从理论到实战 在现代移动应用中,数据安全是不可忽视的一环。无论是用户隐私保护,还是敏感信息的存储与传输,加密技术都扮演着重要角色。本文将以 AES(Advanced Encryption Standard&am…

IDEA编译器集成Maven环境以及项目的创建(2)

选择:“File” ---> "Othoer Setting" --> "Settings for New Projects..." --->搜索“Maven” 新建项目 利用maven命令去编译这个项目 利用maven去打包

Open FPV VTX开源之默认MAVLink设置

Open FPV VTX开源之默认MAVLink设置 1. 源由2. 准备3. 连接4. 安装5. 配置6. 测试6.1 启动wfb-ng服务6.2 启动wfb-ng监测6.3 启动QGroundControl6.4 观察测试结果 7. 总结8. 参考资料9. 补充9.1 telemetry_tx异常9.2 DEBUG串口部分乱码9.3 PixelPilot软件问题 1. 源由 飞控图传…

gesp(C++五级)(4)洛谷:B3872:[GESP202309 五级] 巧夺大奖

gesp(C五级)(4)洛谷:B3872:[GESP202309 五级] 巧夺大奖 题目描述 小明参加了一个巧夺大奖的游戏节目。主持人宣布了游戏规则: 游戏分为 n n n 个时间段,参加者每个时间段可以选择一个小游戏。 游戏中共有…

像JSONDecodeError: Extra data: line 2 column 1 (char 134)这样的问题怎么解决

问题介绍 今天处理返回的 JSON 的时候,出现了下面这样的问题: 处理这种问题的时候,首先你要看一下当前的字符串格式是啥样的,比如我查看后发现是下面这样的: 会发现这个字符串中间没有逗号,也就是此时的J…

道旅科技借助云消息队列 Kafka 版加速旅游大数据创新发展

作者:寒空、横槊、娜米、公仪 道旅科技:科技驱动,引领全球旅游分销服务 道旅科技 (https://www.didatravel.com/home) 成立于 2012 年,总部位于中国深圳,是一家以科技驱动的全球酒店资源批发商…

导出文件,能够导出但是文件打不开

背景: 在项目开发中,对于列表的查询,而后会有导出功能,这里导出的是一个excell表格。实现了两种,1.导出的文件,命名是前端传输过去的;2.导出的文件,命名是根据后端返回的文件名获取的…

ISP各模块功能介绍

--------声明,本文为转载整理------- ISP各个模块功能介绍: 各模块前后效果对比: 黑电平补偿(BLC) 在理想情况下,没有光照射的像素点其响应值应为0。但是,由于杂质、受热等其它原因的影响&…

dockerfile实现lnmp

dockerfile实现lnmp 自定义镜像实现整个架构 (基础镜像centos7) nginx cd /opt mkdir nginx mysql php vim Dockerfile docker network create --subnet172.111.0.0/16 mynetwork #创建自定义网段 docker run -itd --name nginx -p 80:80 --cpu-quota 20000 -m 512m -v /op…

DeepSeek-V3技术报告

摘要 https://arxiv.org/pdf/2412.19437v1 我们介绍DeepSeek-V3,这是一个强大的混合专家(MoE)语言模型,具有6710亿个总参数,每个token激活37亿个参数。为了实现高效推理和经济实惠的训练,DeepSeek-V3采用了…

【spring mvc】文件上传、下载

文件上传,存储至本地目录中 一、代码1、工具类(敏感后缀过滤)2、文件上传,存储至本地3、文件下载 二、效果演示1、上传1.1、postMan 请求1.2、上传效果 2、下载2.1、下载效果 一、代码 1、工具类(敏感后缀过滤&#x…

CryptoMamba:利用状态空间模型实现精确的比特币价格预测

“CryptoMamba: Leveraging State Space Models for Accurate Bitcoin Price Prediction” 论文地址:https://arxiv.org/pdf/2501.01010 Github地址:https://github.com/MShahabSepehri/CryptoMamba 摘要 预测比特币价格由于市场的高波动性和复杂的非线…

dockerfile2.0

dockerfile实现lnmp nginx centos7 mysql centos7 php centos7 自定义镜像来实现整个架构 cd /opt mkdir nginx mysql php cd nginx 拖入nginx和wordpress vim Dockerfile vim nginx.conf ↓ worker_processes 1; events {worker_connections 1024; } http {include …

C#类型转换

C#是静态类型的语言,变量一旦声明就无法重新声明或者存储其他类型的数据,除非进行类型转换。本章的主要任务就是学习类型转换的知识。类型转换有显式的,也有隐式的。所谓显式,就是我们必须明确地告知编译器,我们要把变…

智能物流升级利器——SAIL-RK3576核心板AI边缘计算网关设计方案(一)

近年来,随着物流行业智能化和自动化水平不断提升,数据的实时处理与智能决策成为推动物流运输、仓储管理和配送优化的重要手段。传统的集中式云平台虽然具备强大计算能力,但高延迟和带宽限制往往制约了物流现场的即时响应。为此,我…

【算法篇】前缀和

🔥个人主页:Quitecoder 🔥专栏:算法笔记仓 前缀和是一种常用于处理数组区间求和问题的技巧。它可以用来减少重复计算,使得多次查询区间和的时间复杂度从 O(n) 降低到 O(1) 目录 1. 一维模版2. 二维模版3. 除自身以外数…

第R4周:LSTM-火灾温度预测

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 文章目录 一、代码流程1、导入包,设置GPU2、导入数据3、数据集可视化4、数据集预处理5、设置X,y6、划分数据集7、构建模型8、定义训练函…

机组存储系统

局部性 理论 程序执行,会不均匀访问主存,有些被频繁访问,有些很少被访问 时间局部性 被用到指令,不久可能又被用到 产生原因是大量循环操作 空间局部性 某个数据和指令被使用,附近数据也可能使用 主要原因是顺序存…