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

算法题(129):二维前缀和

审题:

本题需要我们将q组矩阵的和打印出来

思路:
方法一:二维前缀和

由于本题使用暴力的模拟方法运行次数高达1e11,会超时,所以我们采用运行次数在1e6的二维前缀和来解题

第一步:前缀和的求法

x = i,y = j的二维矩阵前缀和f[i][j]就是A + B + C + a[i][j]

而为了将式子转化为表达式,我们可以将式子和前缀和联系起来:
(A+B) + (A+C)- A + a[i][j]

而A+B的面积就是x=i-1,y=j的位置的前缀和:f[i-1][j]

其他同理,于是转化为:f[i][j] = f[i-1][j]+f[i][j-1]-f[i-1][j-1]+a[i][j]

第二步:根据矩阵的左上角坐标和右下角坐标确定矩阵和

思考方法和前面类似:

f[x2][y2] = A+B+C+answer

=> (A+B)+(A+C)-A+answer

最终推导得到:answer = f[x2][y2]+f[x1-1][y1-1]-f[x1-1][y2]-f[x2][y1-1]

解题:

#include<iostream>
using namespace std;
typedef long long ll; 
ll n,m,q;
const ll N = 1e3+10;
ll f[N][N];//前缀和数组
ll a[N][N];
int main()
{//数据录入cin >> n >> m >> q;for(int i = 1; i <= n; i++){for(int j = 1; j <= m; j++){cin >> a[i][j];}}//前缀和处理for(int i = 1; i <= n; i++){for(int j = 1; j <= m; j++){f[i][j] = f[i-1][j] + f[i][j-1] - f[i-1][j-1] + a[i][j];}}//数据处理并输出while(q--){ll x1,x2,y1,y2;cin >> x1 >> y1 >> x2 >> y2;ll answer = f[x2][y2]+f[x1-1][y1-1]-f[x1-1][y2]-f[x2][y1-1];cout << answer << endl;}return 0;
}

注意:

1.本题采取索引为1的存储方式:

其一是为了和题目给的索引对应

其二是为了避免进行边界检查,因为推导的公式中存在访问i-1或j-1的,如果从索引为0开始计算会出现越界访问-1的情况

2.本题需要采用long long 类型:因为题目中的数据范围是-1e9~1e9,这是很大的,如果进行运算很容易就超过int的存储范围

【模板】二维前缀和

http://www.xdnf.cn/news/734.html

相关文章:

  • C 语言的未来:在变革中坚守与前行
  • 字符输入验证函数
  • PI0 Openpi 部署(仅测试虚拟环境)
  • 百望山游记,佘太君庙,杨家将的故事
  • 【HDFS入门】HDFS故障排查与案例分析:从日志分析到实战解决
  • Linux 进程控制(自用)
  • centos停服 迁移centos7.3系统到新搭建的openEuler
  • 2025年人工智能指数报告:技术突破与社会变革的全景透视
  • 2022 CCF CSP-S2.策略游戏
  • Transformer系列(一):NLP中放弃使用循环神经网络架构
  • xss4之cookie操作
  • SpringBoot Actuator指标收集:Micrometer与Prometheus集成
  • 【网络篇】从零写UDP客户端/服务器:回显程序源码解析
  • 基于kubernetes1.23.17容器化部署RuoYi全栈项目手册
  • AI与思维模型【69】——人类误判心理
  • 计算机视觉与深度学习 | TensorFlow基本概念与应用场景:MNIST 手写数字识别(附代码)
  • 洛谷题目:P7775 [COCI 2009/2010 #2] VUK 题解 (本题简)
  • 雨滴传感器详解(STM32)
  • spring事务
  • C++ 模块化编程(Modules)在大规模系统中的实践难点
  • Spring Boot 集成 Kafka 及实战技巧总结
  • 计算机视觉cv入门之Haarcascade的基本使用方法(人脸识别为例)
  • 内存管理详解(曼波脑图超详细版!)
  • 物联网技术赋能:复杂环境下的能源数据零丢失
  • 【小沐杂货铺】基于Three.JS绘制卫星轨迹Satellite(GIS 、WebGL、vue、react,提供全部源代码)
  • LeetCode 每日一题 2563. 统计公平数对的数目
  • Apache Parquet 文件组织结构
  • Redis 哨兵与集群脑裂问题详解及解决方案
  • 声音识别(声纹识别)和语音识别的区别
  • Linux 下依赖库的问题