【2024.1.17练习】C++岛屿个数/整数删除

2023蓝桥杯C++B组省赛F题:岛屿个数

#include<iostream>
#include<algorithm>
#include<queue>using namespace std;
typedef long long ll;const int dx[8] = { 1, -1, 0, 0, -1, -1, 1, 1 };
const int dy[8] = { 0, 0, 1, -1, -1, 1, -1, 1 };/*    地图块周围的八块格子   */
int n, m;
char graph[60][60];/*实际图*/
bool vis[60][60];/*视图*/bool fill(int A, int B) { // 传入第 A 行第 B 列的地图块for (int i = 0; i <= n + 1; i++) {for (int j = 0; j <= m + 1; j++) {vis[i][j] = false; //给视图层地图赋值,视图层地图比实际地图大一圈}}queue<pair<int, int> > q; //元素为对组类型数据的队列q.emplace(A, B); //将该陆地块位置添加到队列末尾vis[A][B] = true; //视图层标记传入陆地块while (!q.empty()) {auto cur = q.front(); //auto修饰的变量自动选择合适的数据类型(对组),cur存入队列中数据q.pop();//出队操作int x = cur.first, y = cur.second;//x,y分别存储陆地块的行、列for (int i = 0; i < 8; i++) {int nx = x + dx[i], ny = y + dy[i];/* nx , ny 存储了传入陆地块周围八个格子的数据*/if (nx < 1 || nx > n || ny < 1 || ny > m) return true;//判断该陆地是否为边缘块,是则返回trueif (graph[nx][ny] == '0' && !vis[nx][ny]) { //若该周围块为海洋且对应视图块未标记vis[nx][ny] = true; //标记该视图块q.emplace(nx, ny); //队列中传入该视图块,下一次循环将监视该标记块的周围块}}}return false;//遍历结束,所有延伸标记的块均不为边缘块,则返回false
}void bfs(int A, int B) {queue<pair<int, int> > q;q.emplace(A, B);while (!q.empty()) {auto cur = q.front();q.pop();int x = cur.first, y = cur.second;for (int i = 0; i < 4; i++) {//利用队列广度搜索上下左右的块int nx = x + dx[i], ny = y + dy[i];if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && graph[nx][ny] == '1') {//周围衔接陆地块graph[nx][ny] = '0';//陆地块变海洋块q.emplace(nx, ny);//周围块入队}}}
}int main() {ios::sync_with_stdio(false);int T;cin >> T;while (T--) {cin >> n >> m; //确定地图大小:n 行 m 列for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cin >> graph[i][j];}} //输入地图数据int ans = 0; // ans 表示答案for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {if (graph[i][j] == '1') { //遍历地图,判断当前块是否为陆地if (!fill(i, j)) //fill函数:遍历该陆地块周围所有海洋,如果海水最终能漏出到地图边界,说明该陆地并没有被某个环包围,返回truegraph[i][j] = '0'; //将被环包围的陆地变为海洋,这样子岛屿将不复存在}}}for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {if (graph[i][j] == '1') {//若再次遍历到陆地,则岛屿数+1ans++;bfs(i, j);//利用广度搜索删除掉该陆地块周围衔接的所有陆地块,这样地图上每个陆地块最终都只代表一个岛屿!}}}cout << ans << endl;}return 0;
}

这道题的解法妙在判断岛屿是否被环包围,反其道而行之,改而分析周围的海洋能否衍生到地图边界。


2023蓝桥杯C++B组省赛H题:整数删除

#include <iostream>
#include <algorithm>
#include <queue>using namespace std;
typedef long long ll;const int maxn = 5e5 + 10;ll v[maxn], l[maxn], r[maxn];void del(ll x) { //传入要删除的序号r[l[x]] = r[x], l[r[x]] = l[x]; //删除结点前驱的后继指向删除结点的后继,删除结点后继的前驱指向删除结点的前驱v[l[x]] += v[x], v[r[x]] += v[x]; //删除结点的两边结点数值增加
}int main() {int n, k; //n为数列长度,重复k次cin >> n >> k;priority_queue<pair<ll, int>, vector<pair<ll, int>>, greater<pair<ll, int>>> pq;/*priority_queue为优先级队列,greater表示数字小的优先级高*/r[0] = 1, l[n + 1] = n;for (int i = 1; i <= n; i++) {cin >> v[i]; //v[1~n]用于存储数列l[i] = i - 1; //存储对应序号数字的左边一位,对应结点i的前驱r[i] = i + 1; //存储对应序号数字的右边一位,对应结点i的后继pq.emplace(v[i], i); //将数字和它在数列中的序号传入队列}while (k--) {auto p = pq.top(); //获取堆顶(队首)元素,即输入的最小数和其序号pq.pop(); //删除堆顶(队首)元素if (p.first != v[p.second]) {pq.emplace(v[p.second], p.second);k++;} //当原本的最小数因为吸收删除数值变大后,将其重新入队else del(p.second); //否则进行删除结点操作}ll head = r[0];while (head != n + 1) {cout << v[head] << " "; //输出最终结果数列head = r[head]; //访问下一个数}return 0;
}

这道题巧妙地构造了两个数组r[ ] 和l[ ],充当了指针的作用,全程序看似没有使用链表,实则处处使用链表。


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

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

相关文章

ruoyi-vue国产化适配之东方通TongHttpServer

1.将安装包解压 tar -zxvf TongHttpServer_6.0.0.2_x86_64.tar.gz 2.THS 主程序需要 license 才能启动&#xff0c;将 license.dat 文件放在 THS 目录内 3.启动主程序 4. http://IP:8000/ 账号&#xff1a;admin 密码&#xff1a;ths#123.com 5.可以在配置文件--文件编辑…

HFSS笔记/信号完整性分析(二)——软件仿真设置大全

文章目录 1、多核运算设置1.1 如何设置1.2 如何查看自己电脑的core呢&#xff1f;1.3 查看求解的频点 2、求解模式设置Driven Terminal vs Driven modal 3、Design settings4、自适应网格划分5、更改字体设置 仅做笔记整理与分享。 1、多核运算设置 多核运算只对扫频才有效果&…

STC8H8K蓝牙智能巡线小车——5.超声波测距(超声波检测障碍物)

超声波测距原理 所选超声波测距模组&#xff1a;HC-SR04 官方解释 HC-SR04 超声波测距模块可供 2cm提-400cm 的非接触式距离感测功能&#xff0c;测距精度可达高到 3mm&#xff1b;模块包括超声波发射器、接收器与控制电路。 基本工作原理 采用 IO 口 TRIG 触发测距&#…

ARM day2、day3 汇编

一、汇编学习&#xff1a;可以向上理解软件、向下感知硬件 二、符号&#xff08;注释&#xff09; 注释#注释&#xff08;放在行首表示注释一行&#xff09;/* */注释#数字立即数&#xff1a;一种标号&#xff08;比如main: loop:&#xff09;.text .end换行…

2024 年 SEO 您需要了解的 8 个关键 SEO 趋势

SEO的未来正趋向于更加以用户为中心、合乎道德和技术先进的方法。 为什么&#xff1f; 人工智能 &#xff08;AI&#xff09; 和机器学习在搜索引擎中的兴起使他们能够更好地理解用户意图并提供更相关的结果Google 将经验、专业知识、权威性和可信度 &#xff08;E-E-A-T&…

【flink番外篇】18、通过数据管道将table source加入datastream示例

一、Flink 专栏 Flink 专栏系统介绍某一知识点&#xff0c;并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分&#xff0c;比如术语、架构、编程模型、编程指南、基本的datastream api用…

安全基础~web攻防特性1

文章目录 知识补充ASP安全Aspx安全分析与未授权访问php特性&web89~97靶场练习ctfshow 知识补充 使用thinkphp开发的框架&#xff0c;其首页访问指向public目录&#xff0c;指向其中的index.php文件 指向的index.php打开网页后是如下情况&#xff0c;代码如下 定义应用目…

计算机网络——第三层:网络层

1. IP数据报 1.1 IPV4数据报 1.1.1 IPv4数据报的结构 如图按照RFC 791规范显示了一个IPv4数据包头部的不同字段 IPv4头部通常包括以下部分&#xff1a; 1.1.1.1 版本&#xff08;Version&#xff09; 指明了IP协议的版本&#xff0c;IPv4表示为4。 1.1.1.2 头部长度&#x…

【机器学习入门】机器学习基础概念与原理

*&#xff08;本篇文章旨在帮助新手了解机器学习的基础概念和原理&#xff0c;不深入讨论算法及核心公式&#xff09; 目录 一、机器学习概念 1、什么是机器学习&#xff1f; 2、常见机器学习算法和模型 3、使用Python编程语言进行机器学习实践 4、机器学习的应用领域 二…

nxp s32k144芯片使用J-LINK程序刷写

1.nxp s32k144 (1)打开软件&#xff1a;J-Flash V6.30j (2)新建工程&#xff1a;file->new project (3)选择芯片型号和 target interface (4)可以保存芯片和接口配置 (5)打开程序&#xff1a;File->open data file &#xff08;6&#xff09;程序刷写&#xff1a;T…

探索 GitHub:高效使用技巧与实例分享

探索 GitHub&#xff1a;高效使用技巧与实例分享 前言: 欢迎来到本篇博客&#xff0c;今天我们将深入研究 GitHub 的一些高效使用技巧&#xff0c;以便更好地利用这一强大的代码托管平台。 1. GitHub 简介&#xff1a; GitHub 是全球最大的代码托管平台之一&#xff0c;它不…

Linux下安装Mysql【CentOS7 】

Linux下安装Mysql 一、Linux下安装Mysql-5.7.41【tar包下载安装】1.1.首先检查是否已经安装过mysql1.2.下载Linux版本的Mysql-5.71.3.解压缩1.4.安装执行 rpm 安装包需要先下载 openssl-devel 插件1.5.安装 Mysql5.7 执行 rpm 安装包1.6.Mysql相关操作命令1.7.查看Mysql-5.7 临…

Hadoop集群配置及测试

Hadoop集群配置及测试 NameNode与SecondaryNameNode最好不在同一服务器 ResourceManager较为消耗资源&#xff0c;因而和NameNode与SecondaryNameNode最好不在同一服务器。 配置文件 hadoop102hadoop103hadoop104HDFSNameNodeDataNodeDataNodeSecondaryNameNodeDataNodeYAR…

Pandas实战100例 | 案例 67: 布尔运算

案例 67: 布尔运算 知识点讲解 布尔运算是数据处理中的一个重要部分&#xff0c;尤其是在处理布尔&#xff08;逻辑&#xff09;数据时。Pandas 支持常见的布尔运算&#xff0c;如 AND、OR 和 XOR。 布尔运算: & (AND): 两列都为 True 时结果为 True。| (OR): 任一列为 …

快速上手的 AI 工具-文心一言

简介 最近正打得火热的AIGC概念&#xff0c;相信大家肯定也都多少接触到了&#xff0c;那么AIGC概念股到底是什么呢&#xff1f;我个人最近也看了一些平台如&#xff1a;文心一言、通义千问、讯飞星火、豆包等等&#xff01;各位朋友也千万不要错过啦&#xff0c;真是各有各的特…

VC++中使用OpenCV读取图像、读取本地视频、读取摄像头并实时显示

VC中使用OpenCV读取图像、读取本地视频、读取摄像头并实时显示 最近闲着跟着油管博主murtazahassan&#xff0c;学习了一下LEARN OPENCV C in 4 HOURS | Including 3x Projects | Computer Vision&#xff0c;对应的Github源代码地址为&#xff1a;Learn-OpenCV-cpp-in-4-Hour…

顺序表(C/C++)

本篇将讲解一些关于顺序表的内容&#xff0c;顺序表分为静态顺序表和动态顺序表&#xff0c;其中经常用到的为动态顺序表&#xff0c;所以本篇将以动态顺序表为重点给出一些关于动态顺序表的操作。 因为顺序表的实现逻辑较为简单&#xff0c;对于代码的讲解大多以注释给出。 1…

PLSQL去除一个字符串中的数字

PLSQL去除一个字符串中的数字 SQL Select regexp_replace(abc1234ABC678aaad590AAA, [0-9], ) As 去数字后From dual;效果

11.2 PCL从ROS获取激光雷达的点云数据及处理

这部分内容结合了前面的内容。其实很简单&#xff0c;分三步走就可以&#xff1a;首先是通过ROS打开激光雷达&#xff0c;查看PCL配置需要的信息。然后是用PCL通过ROS发布的topic获取激光雷达的数据。最后将ROS和PCL结合。 实现上面两步的前提是我们已经部署好了ROS环境及PCL环…

python下常用的爬虫模块

目录 一&#xff1a;requests 二&#xff1a;BeautifulSoup 三&#xff1a;Scrapy 四&#xff1a;Selenium 一&#xff1a;requests requests 是一个用于发送 HTTP 请求的 Python 库。它提供了简洁的 API 来发送各种类型的 HTTP 请求&#xff0c;如 GET、POST、PUT、DELETE…