激光炸弹(二维前缀和)-Java版

import java.io.*;


/*
 * 题目分析:一个最大5000 * 5000 的矩阵, 爆炸范围在 [0,10e9]
 * 地图上的目标是随机分布,如果要暴力计算每一个区间R的权值,会很麻烦
 * 可以用二维前缀和先将权值存起来
 * for(int i = 1;i <= n;i ++) {
			for(int j = 1;j <= m;j ++) {
				g[i][j] = g[i][j-1] + g[i-1][j] - g[i-1][j-1] + read[j-1];
			}
		}
		//前缀和下标有出现-1,所以下标从1开始算。真正的有效下标应该是[1,5001]
		 
	再遍历其中的每个区间R * R取一个最大值
	其中(n,m) 表示距离远点最远的那个点(只遍历有目标的位置)
	for(int i = R;i <= n; i++)
         for(int j = R;j <= m; j++)
            res = Math.max(res,s[i][j] - s[i - R + 1 - 1][j] - s[i][j-R+1-1] + s[i-R+1-1][j-R+1-1]);
    
        所以读入位置的时候,除了要更新该位置的权值w,还要不断更新n,m.用来后序遍历
        当 R < 5001,可以用上面的式子算,如果 R >= 5001,就把R设置成 5001,否则进不去循环    
        如果把R设置成5001,一般n,m也到不了那么大,所以初始化n = m = R (防止出现爆炸范围大于所以目标位置)
    
        半径为R的爆炸范围可以摧毁 (R + 1)(R + 1)个点 但因为爆炸范围要与边平行,所以少炸一个
        因为只有范围 R * R能炸到,所以爆炸点上下、左右的跨度只有 R - 1;
        在算前缀和的时候, x1 = x2 - (R - 1) - 1  == x2 - R        
        
        
 */
public class Main {
	static int n,m;	//其中(n,m) 表示距离远点最远的那个点
	static final int N = 5010;
	static int[][] s = new int[N][N];	//用于存放前缀和
	//输入较多,用BufferedReader
	static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
	
	public static void main(String[] args) throws IOException {
		int cnt,R;	//表示目标个数和爆炸范围
		String[] init = in.readLine().split(" ");
		cnt = Integer.parseInt(init[0]);
		//R最多取到地图边界
		R = Math.min(5001, Integer.parseInt(init[1]));
		
		//因为要从R ~ n,与R ~ m遍历所有目标,所以如果 n < R 或者 m < R 会遍历不到
		//所以先让n = m = R
		n = m = R;
		
		while(cnt -- > 0) {
			//init可以复用
			init = in.readLine().split(" ");
			int x = Integer.parseInt(init[0]);
			int y = Integer.parseInt(init[1]);
			int w = Integer.parseInt(init[2]);
			//计算前缀和下标从1开始,题目是从0开始,所有把题目的所有下标都++
			x++;
			y++;
			n = Math.max(n,x);
			m = Math.max(m,y);
			s[x][y] += w;
		}
		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];
			}
		}
		
		//遍历半径为R的正方形
		int res = 0;
		for(int i = R;i <= n;i ++) {
			for(int j = R;j <= m;j ++) {
				res = Math.max(res, s[i][j] - s[i - R][j] - s[i][j - R] + s[i - R][j - R]);
			}
		}
		System.out.println(res);
		in.close();
	}
  
}

前缀和例题:一维版前缀和

                     二维前缀和

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu宝塔面板本地部署Emlog个人博客网站并远程访问【内网穿透】

文章目录 前言1. 网站搭建1.1 Emolog网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 3. 公网访问测试总结 前言 博客作为使…

PostgreSQL 技术内幕(十二) CloudberryDB 并行化查询之路

随着数据驱动的应用日益增多&#xff0c;数据查询和分析的量级和时效性要求也在不断提升&#xff0c;对数据库的查询性能提出了更高的要求。为了满足这一需求&#xff0c;数据库引擎不断经历创新&#xff0c;其中并行执行引擎是性能提升的重要手段之一&#xff0c;逐渐成为数据…

openGauss学习笔记-147 openGauss 数据库运维-备份与恢复-逻辑备份与恢复之gs_dump

文章目录 openGauss学习笔记-147 openGauss 数据库运维-备份与恢复-逻辑备份与恢复之gs_dump147.1 背景信息147.2 注意事项147.3 语法147.4 参数说明147.4.1 通用参数&#xff1a;147.4.2 转储参数&#xff1a;147.4.3 连接参数&#xff1a; 147.5 说明147.6 示例 openGauss学习…

List的元素覆盖问题

问题场景 在备课底层JDBC链接链接数据库时&#xff0c;将读取的数据封装到对象中并添加到list集合中出现了问题。 错误逻辑 代码编写的考量为减少对象占用内存。想通过一个对象完成数据的传递和保存。 核心问题 List集合存储的是每一个对象的引用地址&#xff0c;如果引用的…

如何选择合适水下应用的集成电缆传感器?

来源&#xff1a;宏集科技 工业物联网丨宏集干货 | 如何选择合适水下应用的集成电缆传感器&#xff1f; 原文链接&#xff1a;https://mp.weixin.qq.com/s/wbN40niOgpUHy1iSH9Ad3Q 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; 前言 许多工业过程都要求将传感器浸…

如何使用技术 SEO 优化 Pinterest 富图钉

Pinterest 可以影响搜索引擎排名&#xff0c;尤其是谷歌。不过&#xff0c;它的作用方式与其他搜索引擎优化因素不同。这就是 Google 将图钉放在 nofollow 列表中。但是&#xff0c;它们仍然可以作为搜索引擎优化的一个重要因素。 高质量的图钉具有高分辨率的图片、吸引人的内…

mybatis入门

Java的三大框架&#xff1a;Spring&#xff0c;SpringMVC,MyBatis 框架其实就是对通用代码的封装&#xff0c;提前写好了一堆接口和类&#xff0c;我们可以在做项目的时候直接引入这些接口和类&#xff0c;基于这些现有的接口和类进行开发&#xff0c;可以大大提高开发效率 J…

【网络编程】-- 01 概述、IP

网络编程 1 概述 1.1 计算机网络 (连接分散计算机设备以实现信息传递的系统) 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统&#xff0c;网络管理软件及网络通信协议的管理和协调下&…

SmartChart:一站式数据可视化解决方案

在当今的数据驱动的世界中&#xff0c;数据可视化已经成为了一个重要的工具&#xff0c;它可以帮助我们理解复杂的数据集&#xff0c;并从中提取有价值的信息。SmartChart就是这样一个强大的数据可视化工具&#xff0c;它提供了一站式的数据可视化解决方案&#xff0c;无论你是…

(十五)Flask覆写wsgi_app函数实现自定义中间件

中间件 一、剖析&#xff1a; 在前面讲session部分提到过&#xff1a;请求一进来&#xff0c;Flask会自动调用应用程序对象【Flask(__name__)】的__call__方法&#xff0c;这个方法负责处理请求并返回响应&#xff08;其实如下图&#xff1a;其内部就是wsgi_app方法&#xff…

【重磅来袭!!!工程师必备初始化建工程软件】

重磅来袭&#xff01;&#xff01;&#xff01;工程师必备初始化软件 每个工程建立前&#xff0c;你是否为了要建立各种文件夹而烦恼&#xff1f;你是否为了因为工程每次文件夹不统一找不到文件而烦扰&#xff1f;来咯&#xff0c;Project Initial V1_0软件只需输入工程名称&am…

安装you-get(mac)

1、首先要有python环境 2、更新pip python -m pip install --upgrade pip 3、安装you-get pip install you-get;

keep-alive 是 Vue 的一个内置组件,用于缓存其他组件的实例,以避免重复渲染和销毁,它可以在需要频繁切换的组件之间提供性能优化

目录 keep-alive 使用 keep-alive 的示例代码&#xff1a; 手动清除组件缓存的示例代码&#xff1a; keep-alive 组件有以下几个优点&#xff1a; keep-alive 的原理&#xff1a; 使用 keep-alive 组件&#xff0c;你可以包裹需要缓存的组件&#xff0c;然后这些组件在切…

基于ssm安徽新华学院实验中心管理系统论文

摘 要 本安徽新华学院实验中心管理系统的设计目标是实现安徽新华学院实验中心的信息化管理&#xff0c;提高管理效率&#xff0c;使得安徽新华学院实验中心管理工作规范化、科学化、高效化。 本文重点阐述了安徽新华学院实验中心管理系统的开发过程&#xff0c;以实际运用为开…

Pytest+Allure生成自动化测试报告!

前言 在自动化测试中&#xff0c;有unittestHTMLTestRunner自动化测试报告&#xff0c;但是生成的测试报告不够美观详细&#xff0c;今天我们来学习一下PytestAllure生成自动化测试报告。 一&#xff1a;安装python中的allure依赖库 在dos窗口中&#xff0c;输入下面三个命令…

AntDesignBlazor示例——创建查询条件

本示例是AntDesign Blazor的入门示例&#xff0c;在学习的同时分享出来&#xff0c;以供新手参考。 示例代码仓库&#xff1a;https://gitee.com/known/AntDesignDemo 1. 学习目标 重构项目文件结构添加日期查询条件实现查询业务逻辑 2. 重构项目结构 在实现列表查询条件功…

【PCB设计】嘉立创EDA器件3D模型导入AD的方法

嘉立创EDA器件3D模型导入AD的方法 一、嘉立创EDA导出3D模型二、CAD编辑3D模型三、AD中加载3D模型 一、嘉立创EDA导出3D模型 在嘉立创EDA中找到对应的元器件&#xff0c;并生成PCB&#xff0c;选择导出3D文件 导出元件step模型 二、CAD编辑3D模型 用FreeCAD打开模型 删除…

JAVA全栈开发 MySql详解

一、数据库 1.数据储存在哪里&#xff1f; 硬盘、网盘、U盘、光盘、内存&#xff08;临时存储&#xff09; 数据持久化 使用文件来进行存储&#xff0c;数据库也是一种文件&#xff0c;像excel &#xff0c;xml 这些都可以进行数据的存储&#xff0c;但大量数据操作&#x…

学习设计模式的一个好网址

常用设计模式有哪些&#xff1f; (refactoringguru.cn)https://refactoringguru.cn/design-patterns

elasticsearch-head 启动教程

D:\elasticsearch-head-master>grunt server ‘grunt’ 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 npm install -g grunt-clinpm install