当前位置: 首页 > news >正文

【C语言】二维前缀和/求子矩阵之和

相信你是最棒哒!!!

目录

一、题目描述

        正确代码

二、题目描述

题目代码

总结


一、题目描述

输入一个 𝑛 行 𝑚 列的整数矩阵,再输入 𝑞个询问,每个询问包含四个整数 𝑥1,𝑦1,𝑥2,𝑦2,表示一个子矩阵的左上角坐标和右下角坐标。

对于每个询问输出子矩阵中所有数的和。

输入格式

第一行包含三个整数 𝑛,𝑚,𝑞

接下来 𝑛 行,每行包含 𝑚 个整数,表示整数矩阵。

接下来 𝑞 行,每行包含四个整数 𝑥1,𝑦1,𝑥2,𝑦2,表示一组询问。

输出格式

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

输入输出样例

输入 

3 4 3
1 7 2 4
3 6 2 8
2 1 2 3
1 1 2 2
2 1 3 4
1 3 3 4

输出 

17
27
21

说明/提示

【数据范围】

1≤𝑛,𝑚≤5000; 1≤𝑞≤100000, 1≤𝑥1≤𝑥2≤𝑛,1≤𝑦1≤𝑦2≤𝑚,

−10000≤矩阵内元素的值≤10000。


正确代码

注释版

#include<stdio.h> long long a[5010][5010], s[5010][5010]; // 定义两个全局二维数组,a用于存储原始数据,s用于存储前缀和int main() /
{long long int n, m, q; // 定义三个长整型变量,分别用于存储矩阵的行数、列数和查询次数scanf("%lld%lld%lld", &n, &m, &q); // 读取矩阵a的值for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)scanf("%lld", &a[i][j]);// 计算前缀和矩阵sfor (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j]; // 根据前缀和的定义计算s[i][j]while (q--) // 进行q次查询{long long int x1, x2, y1, y2; // 定义四个长整型变量,分别用于存储查询的子矩阵的左上角和右下角坐标scanf("%lld%lld%lld%lld", &x1, &y1, &x2, &y2); // 从标准输入读取子矩阵的坐标// 利用前缀和矩阵s计算子矩阵的和long long int sum = s[x2][y2] - s[x2][y1 - 1] - s[x1 - 1][y2] + s[x1 - 1][y1 - 1];printf("%lld\n", sum); // 输出子矩阵的和}return 0; // 主函数返回0,表示程序正常结束
}

简洁版

#include<stdio.h>
long long a[5010][5010], s[5010][5010];
int main()
{long long int n, m, q;scanf("%lld%lld%lld", &n, &m, &q);for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)scanf("%lld", &a[i][j]);for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j];while (q--){long long int x1, x2, y1, y2;scanf("%lld%lld%lld%lld", &x1, &y1, &x2, &y2);long long int sum = s[x2][y2] - s[x2][y1 - 1] - s[x1 - 1][y2] + s[x1 - 1][y1 - 1];printf("%lld\n", sum);}return 0;
}

 


二、题目描述

小明昨天晚上熬夜看小说结果穿越了,他来到一个神秘的大陆。此时,小明正在探索此地,发现这片大陆是由一个 n x m 的矩阵构成,每个位置上都有不同的土地信息。矩阵中的每个元素表示这个地方的价值,可能是金币、陷阱或者普通土地。

如果某个位置的值为正数,表示小明在这个地方获得了金币。
如果某个位置的值为负数,表示这个地方有陷阱,小明会丢失金币。
如果值为零,表示这是普通土地,没有金币也没有陷阱。
贪婪的小明想要在这片大陆上收集金币,于是他找上了你,并答应最终获得的金币分你不到1成。
 

你的程序需要帮他计算出在一个子矩阵内能获得金币数量的总和,如果金币数量小于0,则直接输出0,否则输出金币数量。

输入

第一行包含两个整数 n 和 m,表示大陆的行数和列数(1 <= n, m <= 1000) 
接下来 n 行,每行包含 m 个整数,表示大陆的土地价值。值为正表示金币,值为负表示陷阱,值为零表示普通土地(-1000 <= 价值 <= 1000)
接下来一个整数 q,表示查询的次数 (1 <= q <= 1000)
接下来 q 行,每行包含四个整数 x1, y1, x2, y2,表示查询的子矩阵区域,其中 (x1, y1) 和 (x2, y2) 是该子矩阵的左上角和右下角坐标(注意坐标从 1 开始,且保证 1 <= x1 <= x2 <= n 且 1 <= y1 <= y2 <= m)

输出

对于每个查询,输出一个整数,表示该子矩阵内的金币和。(如果金币数量小于0,则直接输出0)

样例输入 
4 5
1 2 3 4 5
-1 2 -2 3 4
5 -1 3 -2 6
7 8 9 10 -3
3
1 1 2 3
2 2 4 5
1 1 4 5
样例输出 
5
37
63

题目代码

解析版

#include<stdio.h> int a[1010][1010], s[1010][1010]; // 定义两个二维数组a和s,a用于存储输入的矩阵,s用于存储前缀和矩阵int main(){ int m, n, j, i, q, x1, x2, y1, y2, h=0; scanf("%d%d", &n, &m); // 读取矩阵的行数n和列数m// 读取矩阵a的元素for (i = 1; i <= n; i++){for (j = 1; j <= m; j++){scanf("%d", &a[i][j]); }}// 计算前缀和矩阵sfor (i = 1; i <= n; i++){for (j = 1; j <= m; j++){s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j]; // 根据前缀和的定义计算s[i][j]}}scanf("%d", &q); // 读取查询次数q// 处理每个查询for (i = 1; i <= q; i++){h = 0; // 重置h为0,用于存储当前查询的子矩阵和scanf("%d%d%d%d", &x1,&y1,&x2,&y2); // 读取查询的子矩阵的左上角坐标(x1,y1)和右下角坐标(x2,y2)// 根据前缀和的性质计算子矩阵的和h += s[x2][y2] - s[x1 - 1][y2] - s[x2][y1 - 1] + s[x1-1][y1-1]; //一定一定不要忘记加上多减的那一部分// 如果子矩阵的和大于0,则输出h,否则输出0if (h > 0)printf("%d\n", h);else printf("0\n"); //一定一定不要忘记在0后边加上换行符\n 不然就不能全对哦}return 0; 
}

简洁版

#include<stdio.h>
int a[1010][1010], s[1010][1010];
int main(){int m, n, j, i, q, x1, x2, y1, y2, h=0;scanf("%d%d", &n, &m);for (i = 1; i <= n; i++){for (j = 1; j <= m; j++){scanf("%d", &a[i][j]);}}for (i = 1; i <= n; i++){for (j = 1; j <= m; j++){s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j];}}scanf("%d", &q);for (i = 1; i <= q; i++){h = 0;scanf("%d%d%d%d", &x1,&y1,&x2,&y2);h += s[x2][y2] - s[x1 - 1][y2] - s[x2][y1 - 1] + s[x1-1][y1-1];if (h > 0)printf("%d\n", h);else printf("0\n");}return 0;
}


总结

 // 根据前缀和的定义计算s[i][j]  s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j];

// 利用前缀和矩阵s计算子矩阵的和 sum = s[x2][y2] - s[x2][y1 - 1] - s[x1 - 1][y2] + s[x1 - 1][y1 - 1];

洛谷U388817

相关文章:

【C语言】二维前缀和/求子矩阵之和

相信你是最棒哒&#xff01;&#xff01;&#xff01; 目录 一、题目描述 正确代码 二、题目描述 题目代码 总结 一、题目描述 输入一个 &#x1d45b; 行 &#x1d45a; 列的整数矩阵&#xff0c;再输入 &#x1d45e;个询问&#xff0c;每个询问包含四个整数 &#x1d465;1…...

SRS 服务器入门:实时流媒体传输的理想选择

在当今视频流媒体需求爆炸式增长的时代&#xff0c;如何选择一款高效、稳定且功能强大的流媒体服务器成为了许多开发者和企业关注的焦点。而 SRS&#xff08;Simple Realtime Server&#xff09;作为一款开源的流媒体服务器&#xff0c;以其卓越的性能和灵活的功能&#xff0c;…...

【ETCD】【源码阅读】configurePeerListeners() 函数解析

configurePeerListeners 是 ETCD 的一个核心函数&#xff0c;用于为集群中节点之间的通信配置监听器&#xff08;Peer Listener&#xff09;。这些监听器主要负责 Raft 协议的消息传递、日志复制等功能。函数返回一个包含所有监听器的列表。 函数签名 func configurePeerList…...

1_ssrf总结

content 什么是ssrf?简介原理 危害利用内网访问端口扫描fsockopenurlbypass127.0.0.0被禁止绕过302跳转DNS重绑定绕过 file协议dict协议gopher协议主从复制打redis打mysql打fastcgi协议打未授权redis Defence 什么是ssrf? 简介 SSRF&#xff08;Server-Side Request Forger…...

深入解析 Redis

1. 为什么 Redis 性能至关重要&#xff1f; 在现代分布式应用中&#xff0c;Redis 被广泛作为缓存系统、消息队列、实时数据存储和会话管理等多种场景的解决方案。作为一个高性能的内存数据库&#xff0c;Redis 的设计理念是提供低延迟和高吞吐量的操作。然而&#xff0c;当 R…...

Visual Studio 2022发布UWP应用证书绑定失败

最近发布UWP应用时&#xff0c;卡在了关联产品这步&#xff0c;一直提示网络链接问题&#xff0c;获取不到产品信息。创建新项目也是这样&#xff0c;猜测低版本的VS不支持发布UWP应用了&#xff0c;便升级到了VS2022。VS2022创建新UWP工程确实可以关联发布应用&#xff0c;并成…...

K8S对接ceph的RBD块存储

1 PG数量限制问题 1.1 原因分析 1.还是老样子&#xff0c;先创建存储池&#xff0c;在初始化为rbd。 [rootceph141~]# ceph osd pool create wenzhiyong-k8s 128 128 Error ERANGE: pg_num 128 size 3 for this pool would result in 295 cumulative PGs per OSD (2067 tot…...

ragflow连不上ollama的解决方案

由于前期wsl默认装在C盘&#xff0c;后期部署好RagFlow后C盘爆红&#xff0c;在连接ollama的时候一直在转圈圈&#xff0c;问其他人没有遇到这种情况&#xff0c;猜测是因为内存不足无法加载模型导致&#xff0c;今天重新在E盘安装wsl 使用wsl装Ubuntu Win11 wsl-安装教程 如…...

ACL与Prefix List(前缀列表)

匹配工具一般搭配其他操作&#xff0c;可实现NAT&#xff0c;路由策略&#xff0c;策略路由&#xff0c;MQC&#xff0c;流量过滤等操作 通配符掩码 我们都知道子网掩码的1是精确匹配&#xff0c;1是大致匹配&#xff0c;1必须连续 我们也知道反掩码的1是大致匹配&#xff0…...

OpenSSH和OpenSSL升级

需求 centos7.9升级SSH和SSL OpenSSH升级为openssh9.8 OpenSSL升级为openssl-3.4.0 下载openssh最新版本与openssl对应版本 openssh最新版本下载地址 wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gzOpenSSL下载地址 这里下载的是3.4.0 wg…...

数据库继续学习

数据库中的外键约束的作用是什么&#xff1f; 外键约束用于在多表操作中保证数据的一致性、完整性和正确性。它确保引用的数据在主表中存在&#xff0c;从而避免孤立记录的出现。 物理外键与逻辑外键的选择&#xff1f; 推荐使用逻辑外键。逻辑外键是指在应用程序层面上实现外键…...

车载以太网-UDPNM

文章目录 UDPNM定义在车载以太网中的作用网络节点状态监测唤醒和睡眠管理网络拓扑发现工作流程消息发送消息接收与处理与其他车载网络协议的比较和协作UDPNM的工作原理是什么?1.消息构建与发送原理消息格式构建发送机制2.消息接收与响应原理接收过程响应机制3.状态管理与定时器…...

网页核心页面设计(第8章)

一、伪元素 伪元素是 CSS 中的一种选择器&#xff0c;用于选择某些特定的元素或元素的一部分&#xff0c;而这些元素本身并不存在于文档的结构中。伪元素使得网页设计师可以更灵活地控制样式&#xff0c;从而可以为元素的内容、框架或文本提供额外的样式&#xff0c;增强网页的…...

在PowerShell下运行curl命令出现错误:Invoke-WebRequest : 无法处理参数,因为参数名称“u”具有二义性

今天在Windows 11下测试Nanamq的HTTP API&#xff0c;按照其文档输入&#xff1a; curl -i --basic -u admin:public -X GET "http://localhost:8081/api/v4/subscriptions" 结果出现二义性错误&#xff1a; 而且输入curl --help命令想看看参数说明的时候&#xff…...

医疗花费预测——协方差矩阵和热力图

引言 在医疗数据分析中&#xff0c;预测个人的医疗花费是一个重要的课题。这不仅有助于个人健康管理&#xff0c;也为医疗资源的合理分配提供了数据支持。本篇博客&#xff0c;我们将探讨如何利用协方差矩阵和热力图来分析和预测个人的医疗花费。我们将以DataFountain提供的数…...

react antd tabs router 基础管理后台模版

在构建 React 后台管理系统时&#xff0c;使用标签页的方式展示路由是一种高效且用户友好的设计模式。这种实现方式通常允许用户在多个页面之间快速切换&#xff0c;并保留页面的状态&#xff0c;类似于浏览器的多标签页功能。 需求分析 1.动态标签页&#xff1a;根据用户的导…...

【数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 测试说明 我的通关代码: 测试结果&#xff1a; 任务描述 本关任务&#xff1a;编写一个程序实现环形队列的基本运算。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 初始化队列、销毁队列、判断队列是否为空、进队列…...

【数据结构——栈与队列】链栈的基本运算(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 测试说明 我的通关代码: 测试结果&#xff1a; 任务描述 本关任务&#xff1a;编写一个程序实现链栈的基本运算。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 初始化栈、销毁栈、判断栈是否为空、进栈、出栈、取栈…...

GIT CLONE ERROR: remote: [session-ec426a86] Access denied

报错信息&#xff1a; remote: [session-ec426a86] Access denied 错误原因&#xff1a; 1.更换了不同的GIT仓或者账号 2.之前设置了默认账号密码信息 3. git init 只初始化了GIT项目&#xff0c;并没有清空原有的账号密码配置 处理方法&#xff1a; win11需要到个人文件…...

GitHub 正式收录 MoonBit 作为一门通用编程语言!核心用户突破三万!

MoonBit 编程语言正式被 Github 收录&#xff01;这对于一个仅有两年发展时间的编程语言来说是一种高度认可&#xff0c;期待未来由 MoonBit 编写的项目数量快速增长&#xff0c;早日成为首个由国人研发迈进 10 万➕ 用户的编程语言。 最近用户数已经接近 3 万&#xff08;数据…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...