99. 激光炸弹(前缀和)
题目:输入N个宝物的位置和价值,给出一个炸弹的炸弹范围(是一个正方形)的边长,找出一颗炸弹最多能炸掉的最大价值
题目中的宝物放在一个(x,y)的点上,而我们的炸弹是炸一个(r,r)的范围,所以如果一个点恰好在正方形的边上,是不会被摧毁的,上图炸掉的宝物数量为0
如图,当把这个炸弹范围拖动的时候,一个点正好就被放在了炸弹区域内,说明这个宝物可以被炸掉,所以不妨把r*r矩阵想成(r-1)(r-1)
我们可以运用前缀和的思想:快速求(x1~x2,y1~y2)的和来做这一道题,一次求和的时间复杂度是O(1)的,而我们总共有5000x5000个点,是可以满足条件的
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 5005;
int s[N][N];/*思路:1.输入(0~5001,0~5001)的所有宝物,并求他们的二位前缀和矩阵2.枚举边长为(r-1)(r-1)的所有矩阵,然后找到一个炸弹炸掉的最大宝物价值
*/
int query(int x1, int y1, int x2, int y2)
{return s[x2][y2] - s[x2][y1 - 1] - s[x1][y2 - 1] + s[x1 - 1][y1 - 1];
}int main()
{int n, r;cin >> n >> r;r = min(5002, r); //r最大值可能是10^9越界了for (int i = 0;i < n;i++){int x, y, w;cin >> x >> y >> w;s[++x][++y] += w; //因为有可能多个宝物在一个点上,所以要用+=//二分前缀和要用到x-1的值,所以让x++,不考虑边界问题}for(int i=1;i<=5002;i++)for (int j = 1;j <= 5002;j++){s[i][j] += s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1];//将原来的数组转化为前缀和数组}int res = 0;//x++后,取值[1,5001]for(int i=r;i<=5001;i++)for (int j = r;j <= 5001;j++){//i,j表示的是矩形的右下角,i-r,j-r表示的是左上角//由于是(r-1)(r-1)的正方形,所以左上角顶点(j-(r-1)-1)=(j-r)res = max(res, s[i][j] - s[i - r][j] - s[i][j - r] + s[i - r][j - r]);//等于res=max(res,query(i-r+1,j-r+1,i,j));}cout << res;
}
99. 激光炸弹(前缀和)相关推荐
- AcWing 99. 激光炸弹 (二维前缀和)
99. 激光炸弹 题意 给定一个5000x5000的地图 随机在该地图上放置物品,物品具有价值,且不同物品可以放置在同一位置 有一个炸弹的爆炸范围为RxR的正方形 问该炸弹在地图上爆炸一次,最多能摧毁 ...
- 《算法竞赛进阶指南》打卡-基本算法-AcWing 99. 激光炸弹:二维前缀和
文章目录 题目解答 题目来源 题目解答 来源:acwing 分析: 前缀和习惯从下标1开始. 注意:本题是不包含边界的.什么意思? 以样例为例,这里有两个点,分别在(0,0) 和(1,1),且攻击的矩 ...
- 99. 激光炸弹 java 题解 (前缀和)
输入样例: 2 1 0 0 1 1 1 1 输出样例: 1 解题思路: 先求出二维数组的前缀和数组,在这个数组上找满足条件的最大子矩阵的权值. Java代码: import java.io.*;pub ...
- P2280 [HNOI2003]激光炸弹(二维前缀和的简单应用)难度⭐⭐⭐
P2280 [HNOI2003]激光炸弹 输出 2 1 0 0 1 1 1 1 输入 1 这道题就是最基础的二位前缀和的应用,如果不会的话可以点击下方链接学习哟 前缀和差分详解 #include< ...
- [HNOI2003]激光炸弹(二维前缀和+大坑点)
地图上有 N 个目标,用整数 Xi,Yi表示目标在地图上的位置,每个目标都有一个价值 Wi. 注意:不同目标可能在同一位置. 现在有一种新型的激光炸弹,可以摧毁一个包含 R×R个位置的正方形内的所有目 ...
- 暑假每日算法学习打卡(十)----[HNOI2003]激光炸弹,「土」秘法地震(二维前缀和),Captcha Cracker【牛客】
[HNOI2003]激光炸弹 题目描述 一种新型的激光炸弹,可以摧毁一个边长为R的正方形内的所有的目标. 现在地图上有n(N ≤ 10000)个目标,用整数Xi,Yi(其值在[0,5000])表示目 ...
- 激光炸弹(BZOJ1218)
激光炸弹(BZOJ1218) 一种新型的激光炸弹,可以摧毁一个边长为R的正方形内的所有的目标.现在地图上有n(N<=10000)个目标,用整数Xi,Yi(其值在[0,5000])表示目标在地图上 ...
- P2280 [HNOI2003]激光炸弹
P2280 [HNOI2003]激光炸弹 题目描述 输入输出格式 输入格式: 输入文件名为input.txt 输入文件的第一行为正整数n和正整数R,接下来的n行每行有3个正整数,分别表示 xi,yi ...
- bzoj1218[HNOI2003]激光炸弹
bzoj1218[HNOI2003]激光炸弹 题意: 坐标系上有n个目标,每个目标有一个价值,现在求一个边与坐标轴平行,边长为R的正方形,使在其内部(原题是不包括边界,然而实际上不是这样)的目标价值最 ...
最新文章
- 【CVPR2022】双曲图像分割
- 003_SQL语言简介
- apache配置文件httpd.conf----小白福利
- BZOJ 2716 [Violet 3]天使玩偶 (CDQ分治、树状数组)
- 基于注册中心的Dubbo服务
- MySQL索引背后的数据结构及算法原理(转)
- php获取本机ip外网地址,php获取本机ip(远程IP地址)
- windows系统 安装MongoDB
- Leetcode-5148 Binary Tree Coloring Game(二叉树着色游戏)
- 跨域cookie设置
- Redis 管理工具 TreeNMS
- Laravel Collect集合用pluck取多维数组中某个字段值
- SpringBoot整合elasticsearch (java整合es)
- Evolutionary Spectral Clustering by Incorporating Temporal Smoothness论文整理
- LocalDate的用法与String互转
- 赵小楼《天道》《遥远的救世主》深度解析(126)说老实话办老实事,实事求是
- 具有先天开源优势的Web前端技术社区里也是波澜不惊
- [转载评论]月入1.5万 中产阶层该买什么车?
- 去静态化 php,PHP页面静态化 - 菜鸟要飞啊的IT小窝 - OSCHINA - 中文开源技术交流社区...
- 私域生态中的“消费者共创”:超级用户如何让Lego重焕生机
热门文章
- oracle trace跟踪,oracle数据库跟踪工具 — oracle-tech
- 中职计算机专业英语课件,计算机专业英语课件—unit 1.ppt
- matlab:分析控制系统稳定性综合实例
- 软件测试面试题整理(七)之性能安全篇
- 关于安装Adobe CC系列Photoshop等软件时报错无法写入注册表值错误代码160问题的解决方法
- android微信升级后还原,安卓微信好友一键恢复靠谱吗,微信一键还原后果
- 《java8高级应用与开发》读书笔记(二)
- python库中的ssl.py
- 轻松搭建影音服务器(转)
- javaweb:request请求对象(5)