AcWing99. 激光炸弹

news2024/11/26 2:49:31

题目

地图上有 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.coloradmin.cn/o/1190914.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot自动配置的原理篇,剖析自动配置原理;实现自定义启动类!附有代码及截图详细讲解

SpringBoot 自动配置 Condition Condition 是在Spring 4.0 增加的条件判断功能&#xff0c;通过这个可以功能可以实现选择性的创建 Bean 操作 思考&#xff1a;SpringBoot是如何知道要创建哪个Bean的&#xff1f;比如SpringBoot是如何知道要创建RedisTemplate的&#xff1f;…

前端-第一部分-HTML

一.初识HTML 1.1 HTML 简介 HTML 全称为 HyperText Mark-up Language&#xff0c;翻译为超文本标签语言&#xff0c;标签也称作标记或者元素。HTML 是目前网络上应用最为广泛的技术之一&#xff0c;也是构成网页文档的主要基石之一。HTML文本是由 HTML 标签组成的描述性文本&a…

在Rust中使用多线程并发运行代码

1.Rust线程实现理念 在大部分现代操作系统中&#xff0c;已执行程序的代码在一个 进程&#xff08;process&#xff09;中运行&#xff0c;操作系统则会负责管理多个进程。在程序内部&#xff0c;也可以拥有多个同时运行的独立部分。这些运行这些独立部分的功能被称为 线程&am…

【js逆向实战】某sakura动漫视频逆向

写在前面 再写一个逆向实战&#xff0c;后面写点爬虫程序来实现一下。 网站简介与逆向目标 经典的一个视频网站&#xff0c;大多数视频网站走的是M3U8协议&#xff0c;就是一个分段传输&#xff0c;其实这里就有两个分支。 通过传统的m3u8协议&#xff0c;我们可以直接进行分…

千万别对女项目经理抱有幻想

大家好&#xff0c;我是老原。 前段时间&#xff0c;有一个粉丝朋友来咨询我一个问题&#xff0c;多少是有点把老原我问蒙圈 现在职场上女PM并不少见&#xff0c;也有很多优秀的女PM。 我也有不少和女PM合作的经历&#xff0c;不得不说&#xff0c;和她们沟通/合作可以说是很…

详解卷积神经网络结构

前言 卷积神经网络是以卷积层为主的深度网路结构&#xff0c;网络结构包括有卷积层、激活层、BN层、池化层、FC层、损失层等。卷积操作是对图像和滤波矩阵做内积&#xff08;元素相乘再求和&#xff09;的操作。 1. 卷积层 常见的卷积操作如下&#xff1a; 卷积操作解释图解…

能谈一下 CAS 机制吗

&#xff08;本文摘自mic老师面试文档&#xff09; 一个小伙伴私信我&#xff0c;他说遇到了一个关于 CAS 机制的问题&#xff0c;他以为面试官问的是 CAS 实现单点登录。 心想&#xff0c;这个问题我熟啊&#xff0c;然后就按照单点登录的思路去回答&#xff0c;结果面试官一…

Azure - 机器学习:自动化机器学习中计算机视觉任务的超参数

Azure Machine Learning借助对计算机视觉任务的支持&#xff0c;可以控制模型算法和扫描超参数。 这些模型算法和超参数将作为参数空间传入以进行扫描。 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济…

美国Embarcadero公司正式发布2023 RAD Studio Delphi C++ Builder 12 Athens

Embarcadero 非常高兴地宣布发布 RAD Studio 12 Athens 以及 Delphi 12 和 CBuilder 12。RAD Studio 12 Athens 版本包含令人兴奋的新功能&#xff0c;为该产品的未来奠定了基础。 目录 主要新功能 C 的奇妙之处Delphi 的一些不错的补充FireMonkey 和 Skia 作为新基金会采用 MD…

设计模式(3)-结构型模式

结构型模式 结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式&#xff0c;前者采用继承机制来组织接口和类&#xff0c;后者釆用组合或聚合来组合对象。 由于组合关系或聚合关系比继承关系耦合度低&#xff0c;满足“合成复用原则…

从浏览器输入一个URL到最终展示出页面,中间会发送哪些事儿?

文章目录 前言一. DNS域名解析二. 进行封装三. 进行传输四. 到达服务器后层层分用五. 服务器把响应数据重新封装六. 响应数据进行传输七. 到达客户端层层分用八. 将网页渲染到浏览器上 前言 当你输入一个网址&#xff1a;www.baidu.com时&#xff0c;浏览器究竟做了哪些工作才…

C++ Qt 学习(四):自定义控件与 qss 应用

1. qss 简介 Qt style sheet&#xff08;qss&#xff0c;Qt 样式表&#xff09;&#xff0c;不需要用 C 代码控件进行重载&#xff0c;就可以修改控件外观&#xff0c;类似于前端的 css 2. qss 选择器 2.1 通配符选择器 /* 设置后控件窗口背景色都被修改为黄色 */ * {backg…

如何在Android平板上远程连接Ubuntu服务器code-server进行代码开发?

文章目录 1.ubuntu本地安装code-server2. 安装cpolar内网穿透3. 创建隧道映射本地端口4. 安卓平板测试访问5.固定域名公网地址6.结语 1.ubuntu本地安装code-server 准备一台虚拟机&#xff0c;Ubuntu或者centos都可以&#xff0c;这里以VMwhere ubuntu系统为例 下载code serve…

Vue3使用vue-print-nb插件打印功能

插件官网地址https://www.npmjs.com/package/vue-print-nb 效果展示: 打印效果 根据不同的Vue版本安装插件 //Vue2.0版本安装方法 npm install vue-print-nb --save pnpm install vue-print-nb --save yarn add vue-print-nb//Vue3.0版本安装方法&#xff1a; npm install vue3…

CentOS Linux 系统镜像

CentOS Linux具有以下特点&#xff1a; 稳定性&#xff1a;CentOS Linux旨在提供一个稳定、可靠的服务器环境&#xff0c;适合用于关键业务应用和生产环境。高效性&#xff1a;CentOS Linux经过优化和调整&#xff0c;可以充分发挥硬件的性能&#xff0c;提高系统的整体效率。…

2023 年最新腾讯官方 QQ 机器人(QQ 群机器人 / QQ 频道机器人)超详细开发教程

注册 QQ 开放平台账号 QQ 开放平台是腾讯应用综合开放类平台&#xff0c;包含 QQ 机器人、QQ 小程序、QQ 小游戏 等集成化管理&#xff0c;也就是说你注册了QQ 开放平台&#xff0c;你开发 QQ 机器人还是 QQ 小程序都是在这个平台进行部署上线和管理。 如何注册 QQ 开放平台账…

element ui:常用的组件使用情况记录

前言 将element ui使用过程中一些常用的组件使用情况记录如下 组件 el-tree树组件 树父子节点成一列显示 没有进行设置之前显示效果 设置之后显示效果 ​​​​ 主要代码如下 <el-treeicon-class"none"expand-on-click-node"false"style"…

【uniapp/uview】Collapse 折叠面板更改右侧小箭头图标

最终效果是这样的&#xff1a; 官方没有给出相关配置项&#xff0c;后来发现小箭头不是 uview 的图标&#xff0c;而是 unicode 编码&#xff0c;具体代码&#xff1a; // 箭头图标 ::v-deep .uicon-arrow-down[data-v-6e20bb40]:before {content: \1f783; }附一个查询其他 u…

HTML+CSS、Vue+less+、HTML+less 组件封装实现二级菜单切换样式跑(含全部代码)

一、HTMLCSS二级菜单 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document</title><…

蓝桥杯国一,非ACMer选手保姆级经验分享

目录 一、前言二、蓝桥杯简介三、0基础计算机新手小白&#xff0c;赛前如何准备提高自己的获奖率&#xff1f;3.1 每两周参加一次【蓝桥算法双周赛】3.2 多练真题3.3 参加每一场官方校内模拟赛 四、结语 一、前言 hello&#xff0c;大家好&#xff0c;我是大赛哥(弟)&#xff…