| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> [手写hash][bfs]扫雷 2022年蓝桥杯 -> 正文阅读 |
|
[数据结构与算法][手写hash][bfs]扫雷 2022年蓝桥杯 |
题目描述 小明最近迷上了一款名为《扫雷》的游戏。 其中有一个关卡的任务如下: 在一个二维平面上放置着?n?个炸雷,第?i?个炸雷?(xi,yi,ri) 表示在坐标 (xi,yi)?处存在一个炸雷,它的爆炸范围是以半径为?ri?的一个圆。 为了顺利通过这片土地,需要玩家进行排雷。 玩家可以发射?m?个排雷火箭,小明已经规划好了每个排雷火箭的发射方向,第?j?个排雷火箭?(xj,yj,rj) 表示这个排雷火箭将会在 (xj,yj)?处爆炸,它的爆炸范围是以半径为?rj?的一个圆,在其爆炸范围内的炸雷会被引爆。 同时,当炸雷被引爆时,在其爆炸范围内的炸雷也会被引爆。 现在小明想知道他这次共引爆了几颗炸雷? 你可以把炸雷和排雷火箭都视为平面上的一个点。 一个点处可以存在多个炸雷和排雷火箭。 当炸雷位于爆炸范围的边界上时也会被引爆。 输入格式 输入的第一行包含两个整数 n、m。 接下来的?n?行,每行三个整数 xi,yi,ri,表示一个炸雷的信息。 再接下来的?m?行,每行三个整数 xj,yj,rj,表示一个排雷火箭的信息。 输出格式 输出一个整数表示答案。 数据范围 对于?40%?的评测用例:0≤x,y≤10^9,0≤n,m≤10^3,1≤r≤10, 输入样例:
输出样例:
样例解释 示例图如下,排雷火箭?1?覆盖了炸雷?1,所以炸雷?1?被排除;炸雷?1?又覆盖了炸雷?2,所以炸雷?2?也被排除。 题意:?有n颗地雷以及m个排雷火箭,分别给出这n+m个点的坐标以及其爆炸半径,处于爆炸半径内的地雷都会被引爆,这个反应可以连锁传递下去,开始时依次引爆所有排雷火箭,问最终能引爆多少颗地雷。 分析:?这道题目有个很关键的信息,所有点爆炸半径都不超过10,而且每个点坐标都是整数,那么对于一个点其半径内的点完全可以枚举出来,这样最多也才枚举不到400个点而已。于是可以以点坐标为索引,存储该点的最大半径以及该点雷数,一开始我用的是map,但是一直T,后来听y总说这题必须手写hash,于是换上手写hash,将点的坐标映射到一个小于1e6的整数上,然后存储点信息的数组都可以以该整数为索引了。手写hash的过程就和数据结构书上写的一样,首先先将点坐标看作一个1e9+1进制的数字,然后将该数字映射到哈希数组上,哈希函数构造方法为除留余数法,冲突处理方法为线性探测再散列。 得到某点的最大半径以及雷数就可以bfs或dfs了,后面的步骤就比较常规了,这道题目主要是手写hash比较难想,根本想不到会卡常数。 具体代码如下:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 5:30:53- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |