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

蓝桥杯题目:二维前缀和

首先分析一下二维数组的差分。s[x2][y2]-s[x1][y1]=s[x2][y2]-s[x2][y1-1]-s[x1-1][y2]+s[x1-1][y1-1]

因为对于二维数组x2y2-x1y1范围内的值需要通过x2y2减去从x1,y2-1的这段存储的前缀和以及减去x2-1,y1这两部分的前缀和,但是还有一个x1-1,y1-1这一段被减去了两次。我们可以通过举例例如:sum(2,2)∼(3,3)=sum3,3sum1,3sum3,1+sum1,1

以及二维数组的前缀和怎么求对于横轴来书和一维数组一样。s[i][j]=s[i-1][j]+a[i][j]

对于纵轴来说s[i][j]=s[i][j]+s[i][j-1]; 

通过举例可得

sum(3,3)=sum2,3​+a[3,1]+a[3,2]+a[3,3]

以下是代码实现

package 二维数组前缀和;import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n=scan.nextInt();int m=scan.nextInt();int q=scan.nextInt();long [][] a=new long[n+1][m+1];long [][] s=new long[n+1][m+1];for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){a[i][j]=scan.nextInt();s[i][j]=s[i][j-1]+a[i][j];}for (int j = 1; j <= m; j++) {s[i][j] += s[i - 1][j];  // 二维前缀和处理}}for(int i=0;i<q;i++){int x1=scan.nextInt();int y1=scan.nextInt();int x2=scan.nextInt();int y2=scan.nextInt();System.out.println(caculate(x1,y1,x2,y2,s));}//在此输入您的代码...scan.close();}public static long caculate(int x1,int y1,int x2,int y2,long [][] s){if(x1>x2||y1>y2){return 0;}return s[x2][y2]-s[x2][y1-1]-s[x1-1][y2]+s[x1-1][y1-1];}
}

相关文章:

  • 【PyQt5】QLineEdit文本对话框点击时关联槽函数,槽函数打开文件选择对话框;并解决选择文件后闪退的问题
  • 【杂谈】-自动驾驶变革:货运革新与机器人出租车崛起
  • 非洲电商争夺战:中国闪电战遭遇本土游击队的降维打击
  • 合成数据在自动驾驶中的实践:工作流、关键技术与评估体系全解析
  • 四、小白如何用Pygame制作一款跑酷类游戏(页面暂停和主角跑步动作的实现)
  • 性能测试中TPS、并发数与线程数的关系
  • 状态模式:有限状态机在电商订单系统中的设计与实现
  • 树莓派超全系列教程文档--(29)config.txt介绍
  • C/C++指针
  • Spring AI与通义千问的完美结合:构建智能对话应用
  • 斯托克斯矢量只定义在线极化基下
  • 美信监控易:运维管理软件的售后优势
  • VUE创建项目
  • UMAEA论文阅读
  • 静态时序分析STA——7.2 STA环境的配置(输入输出路径约束)
  • STM32控制DRV8825驱动42BYGH34步进电机
  • 03_事务
  • redis 配置日志和数据存储位置
  • 【NLP 63、大模型应用 —— Agent】
  • 语义分割技术
  • 梵蒂冈选出新教皇,外交部:望新教皇推动中梵关系不断改善
  • 晋级中部非省会第一城,宜昌凭什么
  • 人民时评:透过上海车展读懂三组密码
  • 对话|蓬皮杜策展人布莱昂:抽象风景中的中国审美
  • 中国经济新动能|警惕数字时代下经济的“四大极化”效应
  • 诺和诺德一季度减重版司美格鲁肽收入增83%,美国市场竞争激烈下调全年业绩预期