AcWing99. 激光炸弹

题目

地图上有 N N N 个目标,用整数 X i , Y i X_i,Y_i Xi,Yi 表示目标在地图上的位置,每个目标都有一个价值 W i W_i Wi

注意:不同目标可能在同一位置。

现在有一种新型的激光炸弹,可以摧毁一个包含 R × R R×R R×R 个位置的正方形内的所有目标。

激光炸弹的投放是通过卫星定位的,但其有一个缺点,就是其爆炸范围,即那个正方形的边必须和 x , y x,y xy 轴平行。

若目标位于爆破正方形的边上,该目标不会被摧毁。

求一颗炸弹最多能炸掉地图上总价值为多少的目标。

输入格式

第一行输入正整数 N N N R R R,分别代表地图上的目标数目和正方形的边长,数据用空格隔开。

接下来 N N N 行,每行输入一组数据,每组数据包括三个整数 X i , Y i , W i X_i,Y_i,W_i Xi,Yi,Wi,分别代表目标的 x x x 坐标, y y y 坐标和价值,数据用空格隔开。

输出格式

输出一个正整数,代表一颗炸弹最多能炸掉地图上目标的总价值数目。

数据范围

  • 0 ≤ R ≤ 1 0 9 0≤R≤10^9 0R109
  • 0 < N ≤ 10000 0<N≤10000 0<N10000
  • 0 ≤ X i , Y i ≤ 5000 0≤X_i,Y_i≤5000 0Xi,Yi5000
  • 0 ≤ W i ≤ 1000 0≤W_i≤1000 0Wi1000

输入样例

2 1
0 0 1
1 1 1

输出样例

1

分析

因为 X i , Y i X_i, Y_i Xi,Yi 的值在 0 ~ 5000 之间,所以可以建立一个二维数组 A A A,其中, A [ i ] [ j ] A[i][j] A[i][j] 就等于位置 ( i , j ) (i,j) (i,j) 上的所有目标的价值之和。即对于每个目标,令 A [ X i ] [ Y i ] + = W i A[X_i][Y_i] += W_i A[Xi][Yi]+=Wi

接下来求出 A A A 的二维前缀和 S S S,即:
S [ i ] [ j ] = ∑ x = 1 i ∑ y = 1 j A [ x ] [ y ] S[i][j] = \sum_{x=1}^{i}\sum_{y=1}^j A[x][y] S[i][j]=x=1iy=1jA[x][y]
如下图所示,再观察 S [ i ] [ j ] , S [ i − 1 ] [ j ] , S [ i ] [ j − 1 ] , S [ i − 1 ] [ j − 1 ] S[i][j],S[i-1][j],S[i][j-1],S[i-1][j-1] S[i][j]S[i1][j]S[i][j1]S[i1][j1] 的关系。
在这里插入图片描述
容易得到如下的递推式:
S [ i ] [ j ] = S [ i − 1 ] [ j ] + S [ i ] [ j − 1 ] − S [ i − 1 ] [ j − 1 ] + A [ i ] [ j ] S[i][j] = S[i-1][j] + S[i][j - 1] - S[i-1][j-1] + A[i][j] S[i][j]=S[i1][j]+S[i][j1]S[i1][j1]+A[i][j]

同理,对于任意一个边长为 R R R 的正方形,有:
∑ x = i − R + 1 i ∑ y = j − R + 1 j A [ x ] [ y ] = S [ i ] [ j ] − S [ i − R ] [ j ] − S [ i , j − R ] + S [ i − R ] [ j − R ] \sum_{x = i - R + 1}^i \sum_{y = j-R+1}^jA[x][y] = S[i][j] - S[i-R][j] - S[i, j-R] + S[i-R][j- R] x=iR+1iy=jR+1jA[x][y]=S[i][j]S[iR][j]S[i,jR]+S[iR][jR]

在这里插入图片描述

因此,只需要 O ( N 2 ) O(N^2) O(N2) 递推求出二维前缀和 S S S,然后 O ( N 2 ) O(N^2) O(N2) 枚举边长为 R R R 的正方形的右下角坐标 ( i , j ) (i,j) (i,j),即可通过上式 O ( 1 ) O(1) O(1) 计算出该正方形内所有目标的价值之和,更新答案。上面给出的两个式子蕴含的思想其实就是 “容斥原理”。

值得一提的是,上面将 ( X i , Y i ) (X_i, Y_i) (Xi,Yi) 作为一个“格子”,而原题中 ( X i , Y i ) (X_i, Y_i) (Xi,Yi) 是一个点,并且正方形边上的目标不会被摧毁。实际上,不妨认为这个点就处于 “格子” ( X i , Y i ) (X_i,Y_i) (Xi,Yi) 的中心位置,格子的左上角坐标为 ( X i − 0.5 , Y i − 0.5 ) (X_i - 0.5,Y_i-0.5) (Xi0.5,Yi0.5),右下角坐标为 ( X i + 0.5 , Y i + 0.5 ) (X_i + 0.5, Y_i + 0.5) (Xi+0.5,Yi+0.5),而正方形的右下角处于 “格线交点” 上,即一个值为 “□.5” 的坐标。这个转化与原问题是等价的。另外,本题内存限制较为严格,可以省略 A A A 数组,读入时直接向 S S S 中累加。

代码

#include <iostream>
using namespace std;const int N = 5010;int S[N][N]; //前缀和数组int main() {int N; //目标数 或者说 点数int R;cin >> N >> R;R = min(R, 5001); for (int i = 0, x, y, w; i < N; i++) {cin >> x >> y >> w;//为防越界,下标从1开始S[x + 1][y + 1] += w;}//求二维前缀和for (int i = 1; i <= 5001; i++) {for (int j = 1; j <= 5001; 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 <= 5001; i++) {for (int j = R; j <= 5001; j++) {//因为在正方形边上的不能爆破,所以实质上计算的是边长为R-1的正方形res = max(res, S[i][j] - S[i - R][j] - S[i][j - R] + S[i - R][j - R]); }}cout << res << endl;return 0;
}

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

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

相关文章

动态规划(3)---Leetcode509.斐波那契数

题目 分析 很明显的动态规划&#xff0c;直接写出。之前都是用递归来写。 题解 class Solution {public int fib(int n) {if (n0) return 0;if (n1) return 1;int q0,p1,r0;for(int i2;i<n;i){rqp;int tmpp;pr;qtmp; }return r;}

快速教程|如何在 AWS EC2上使用 Walrus 部署 GitLab

Walrus 是一款基于平台工程理念的开源应用管理平台&#xff0c;致力于解决应用交付领域的深切痛点。借助 Walrus 将云原生的能力和最佳实践扩展到非容器化环境&#xff0c;并支持任意应用形态统一编排部署&#xff0c;降低使用基础设施的复杂度&#xff0c;为研发和运维团队提供…

移远EC600U-CN开发板 day01

1.官方文档快速上手&#xff0c;安装驱动&#xff0c;下载QPYcom QuecPython 快速入门 - QuecPython (quectel.com)https://python.quectel.com/doc/Getting_started/zh/index.html 注意&#xff1a; &#xff08;1&#xff09;打开开发板步骤 成功打开之后就可以连接开发板…

“2024杭州国际物联网展览会”定于4月份在杭州国际博览中心召开

随着科技的飞速发展&#xff0c;物联网已经成为当今社会的一个重要组成部分。物联网技术正在逐渐渗透到各个领域&#xff0c;为人们的生活带来更多的便利和智慧。物联网的发展趋势将受到技术、应用、安全等多方面的影响和推动。未来&#xff0c;物联网将更加智能化、自主化和安…

《开箱元宇宙》:认识香港麦当劳通过 The Sandbox McNuggets Land 的 Web3 成功经验

McNuggets Land 是 The Sandbox 于 2023 年发布的最受欢迎的体验之一。在本期的《开箱元宇宙》系列中&#xff0c;我们采访了香港麦当劳数位顾客体验暨合作伙伴资深总监 Kai Tsang&#xff0c;来了解这一成功案例背后的策略。 在不断发展的市场营销和品牌推广领域&#xff0c;不…

运行springboot时提示:源值 7 已过时,将在未来版本中删除,并且提示java.time not exist, LocaDateTime类找不到。

运行springboot时提示&#xff1a;源值 7 已过时&#xff0c;将在未来版本中删除&#xff0c;并且提示 java.time not exist, LocaDateTime类找不到。 解决方法&#xff1a; 方式一&#xff1a;通过IDEA修改这几个地方的JDK版本 1&#xff09;打开ProjectStructure->Proj…

解决方案 |法大大电子合同推动汽车后市场多元数智化发展

近日&#xff0c;商务部等9部门联合发布《关于推动汽车后市场高质量发展的指导意见》&#xff08;以下简称《指导意见》&#xff09;&#xff0c;明确了汽车后市场发展的总体目标和主要任务&#xff0c;系统部署推动汽车后市场高质量发展&#xff0c;促进汽车后市场规模稳步增长…

golang工程中间件——redis常用结构及应用(set,zset)

Redis 命令中心 这些篇文章专门以应用为主&#xff0c;原理性的后续博主复习到的时候再详细阐述 set 集合&#xff0c;为了描述它的特征&#xff0c;我们可称呼为无序集合&#xff1b;集合的特征是唯一&#xff0c;集合中的元素是唯一存在 的&#xff1b; 存储结构 元素都…

【MATLAB源码-第69期】基于matlab的LDPC码,turbo码,卷积码误码率对比,码率均为1/3,BPSK调制。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 本文章介绍了卷积码、Turbo码和LDPC码。以相同的码率仿真这三种编码&#xff0c;并对比其误码率性能 信源输出的数据符号&#xff08;二进制&#xff09;是相互独立和等概率的&#xff1b; 信道是加性白高斯噪声信道&#…

如何使用ArcGIS Pro制作个性三维地形图

制作三维地图制作的多了&#xff0c;想着能不能换个“口味”&#xff0c;恰好看见制作六边形蜂窝图&#xff0c;灵光一闪&#xff0c;想着将二者结合&#xff0c;将平滑的三维地形图改成柱状图&#xff0c;从结果来看还可以&#xff0c;这里将制作方法分享给大家&#xff0c;希…

界面组件DevExpress ASP.NET Core v23.1 - 进一步升级UI组件

DevExpress ASP.NET Core Controls使用强大的混合方法&#xff0c;结合现代企业Web开发工具所期望的所有功能。该套件通过ASP.NET Razor标记和服务器端ASP.NET Core Web API的生产力和简便性&#xff0c;提供客户端JavaScript的性能和灵活性。ThemeBuilder工具和集成的Material…

07 # 手写 find 方法

find 的使用 find() 方法返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined。 ele&#xff1a;表示数组中的每一个元素index&#xff1a;表示数据中元素的索引array&#xff1a;表示数组 <script>var arr [1, 3, 5, 7, 9];var result arr.find(fun…

clickhouse安装与远程访问

安装&#xff08;本文以ubuntu系统为例&#xff09; 单节点设置​ 为了延迟演示分布式环境的复杂性&#xff0c;我们将首先在单个服务器或虚拟机上部署ClickHouse。ClickHouse通常是从deb或rpm包安装&#xff0c;但对于不支持它们的操作系统也有其他方法。 例如&#xff0c;…

【c++】——类和对象(中)——赋值运算符重载

作者:chlorine 专栏:c专栏 你站在原地不动,就永远都是观众。 【学习目标】 拷贝复制——赋值运算符重载 目录 &#x1f393;运算符重载的初步认识 &#x1f308;运算符重载 &#x1f308;赋值运算符重载格式 (上) &#x1f308;operator__判断俩个日期是否相等 &#x…

判断sparse matrix是否是对称矩阵

参考&#xff1a; https://stackoverflow.com/questions/48798893/error-in-checking-symmetric-sparse-matrix import scipy.sparse as sp import numpy as np np.random.seed(1)a sp.random(5, 5, density0.5)a结果如下 sym_err a - a.T sym_check_res np.all(np.abs(s…

IP协议相关技术

文章目录 IP协议相关技术仅凭IP无法完成通信DNSARP IP协议相关技术 仅凭IP无法完成通信 人们在上网的时候其实很少直接输入某个具体的IP地址。 在访问Web站点和发送、接收电子邮件时&#xff0c;我们通常会直接输入Web网站的地址或电子邮件地址等那些由应用层提供的地址&…

Python克隆单个网页

网上所有代码都无法完全克隆单个网页&#xff0c;不是Css&#xff0c;Js下载不下来就是下载下来也不能正常显示&#xff0c;只能自己写了&#xff0c;记得点赞~ 效果如图&#xff1a; 源码与所需的依赖&#xff1a; pip install requests pip install requests beautifulsoup4…

【vector题解】连续子数组的最大和 | 数组中出现次数超过一次的数字

连续子数组的最大和 连续子数组的最大和_牛客题霸_牛客网 描述 输入一个长度为n的整型数组array&#xff0c;数组中的一个或连续多个整数组成一个子数组&#xff0c;子数组最小长度为1。求所有子数组的和的最大值。 要求:时间复杂度为 O(n)&#xff0c;空间复杂度为 O(n) 进…

系列二、Shiro的核心组件

一、核心组件 # 1、UsernamePasswordToken 封装了用户的登录信息&#xff0c;使用用户的登录信息来创建Token # 2、SecurityManager Shiro的核心组件&#xff0c;负责安全认证和授权 # 3、Subject Shiro的一个抽象概念&#xff0c;包含了用户信息 # 4、Realm 开发者自定义的模块…

本地生活新赛道-视频号团购怎么做?

目前有在做实体行业的商家一定要看完&#xff0c;只要你进入了这个本地生活新的赛道&#xff0c;那你的生意自然会源源不断&#xff0c;那这个赛道又是什么呢&#xff1f; 这就是十月份刚刚上线的视频号团购项目&#xff0c;开通团购之后&#xff0c;就可以通过发短视频&#…