It takes two (搜索)

news2024/11/25 0:35:02

本题链接:登录—专业IT笔试面试备考平台_牛客网

题目:

样例:

输入
3 4
AAAO
AAAA
AAAA

输出
NO

思路:

        根据题目意思,如果存在的 A 联通不可以成为 矩形,输出 NO,否则输出 YES

        这道题看数据范围是 1000 的图,所以可以联想到搜索。

        对于 ‘ 感染类 ’ 的搜索,BFS最直观合适。

        其中一个核心点就是如何知道右下角的坐标。

        当搜索寻找矩形的时候,我们找到相应的右下角坐标,随后统计搜索的面积与右下角坐标和左上角坐标相乘的面积,是否一致,如果一致,则是矩形,反之。

        我们可以注意到,右下角的坐标永远比坐上角的坐标大,即  右下角(x,y) > 左上角(x,y)

        所以我们每次取 坐标的最大值即可。

        // 寻找右下角
		lx = max(lx,now.x);
		ly = max(ly,now.y);

代码详解如下:

#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#include <algorithm>
#include <unordered_map>
#define endl '\n'
#define x first
#define y second
#define int long long
#define YES puts("YES")
#define NO puts("NO")
#define umap unordered_map
#define All(x) x.begin(),x.end()
#pragma GCC optimize(3,"Ofast","inline")
#define IOS std::ios::sync_with_stdio(false),cin.tie(0), cout.tie(0)
using namespace std;
const int N = 2e6 + 10;
inline void solve();
signed main()
{
//	freopen("a.txt", "r", stdin);
	IOS;
	int _t = 1;
// 	cin >> _t;
	while (_t--)
	{
		solve();
	}

	return 0;
}

bool st[1010][1010];
string g[N];
int n,m;
using PII = pair<int,int>;
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};

// 判断是否可进一步搜索
inline bool isRun(int x,int y)
{
	return (x >= 0 and x < n and y >= 0 and y < m and !st[x][y] and g[x][y] == 'A');
} 

// BFS 搜索
inline bool BFS(int x,int y)
{
	queue<PII>q;
	q.emplace(PII(x,y));
	
	int sum = 0; // 记录搜索面积
	
	int lx = -1,ly = -1;	// 记录右下角坐标
	
	while(q.size())
	{
		PII now = q.front();
		q.pop();
		++sum;	// 统计搜索到的面积
		
		// 寻找右下角
		lx = max(lx,now.x);
		ly = max(ly,now.y);
		
		st[now.x][now.y] = true;
		for(int i = 0;i < 4;++i)
		{
			int bx = now.x + dx[i];
			int by = now.y + dy[i];
			if(isRun(bx,by))
			{
				q.emplace(PII(bx,by));
				st[bx][by] = true;
			}
		}
	}
	
	// 计算右下角坐标和左上角坐标形成的矩形面积
	int t = (lx - x + 1)*(ly - y + 1);
	
	// 判断是否与搜索面积相等
	return (t != sum);
}

inline void solve()
{
	cin >> n >> m;
	for(int i = 0;i < n;++i) cin >> g[i];
	
	for(int i = 0;i < n;++i)
	{
		for(int j = 0;j < m;++j)
		{
			if(!st[i][j] and g[i][j] == 'A')
			{
				if(BFS(i,j))
				{
					cout << "NO" << endl;
					return ;
				}
			}
		}
	}
	cout << "YES" << endl;
}

最后提交:

        

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

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

相关文章

java线程(一)--进程,多线程,synchronized和lock锁,JUC,JUnit

Java线程入门 单核CPU和多核CPU的理解 单核CPU&#xff0c;其实是一种假的多线程&#xff0c;因为在一个时间单元内&#xff0c;也只能执行一个线程的任务。例如&#xff1a;虽然有多车道&#xff0c;但是收费站只有一个工作人员在收费&#xff0c;只有收了费才能通过&#xf…

hive之full outer join(全连接)使用

文章目录 前言语法 :总结 前言 full outer join结合了 LEFT JOIN 和 RIGHT JOIN 的结果&#xff0c;并使用NULL值作为两侧缺失匹配结果。 语法 : SELECT table1.column_name(s),table2.column_name(s) FROM table1 FULL OUTER JOIN table2 ON table1.column_name table2.c…

【YOLO 系列】基于YOLO V8的高速公路摄像头车辆检测识别系统【python源码+Pyqt5界面+数据集+训练代码】

摘要&#xff1a; 基于YOLO V8的高精度高速公路摄像头车辆检测识别系统可用于公路上车辆的识别检测与定位&#xff0c;利用YOLO V8算法可实现图片、视频、摄像头等方式对不同车辆进行目标检测识别&#xff0c;另外支持结果可视化与检测结果的导出。本系统采用YOLO V8目标检测模…

BM25 二叉树的后序遍历(postOrder()返回值用void)

import java.util.*;/** public class TreeNode {* int val 0;* TreeNode left null;* TreeNode right null;* public TreeNode(int val) {* this.val val;* }* }*/public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&a…

软件测试-进阶篇

目录 测试的分类1 按测试对象划分1.1 界面测试1.2 可靠性测试1.3 容错性测试1.4 文档测试1.5 兼容性测试1.6 易用性测试1.7 安装卸载测试1.8 安装测试1.9 性能测试1.10 内存泄漏测试 2 按是否查看代码划分2.1 黑盒测试&#xff08;Black-box Testing&#xff09;2.2 白盒测试&a…

使用ssh免密登录服务器

最近写一些shell脚本的时候&#xff0c;需要读取远程服务器的目录下的内容&#xff0c;不能在脚本中直接使用密码&#xff0c;所以就想到了使用免密的方式进行读取。 一、虚拟机环境 下面是我安装的虚拟机网络配置 虚拟机编号 IP地址 子网掩码 账号 100 192.168.164.100…

每天学点儿Python(3) -- for循环

for循环结构格式如下 for 循环变量 in 遍历对象:语句块 举例一、 for i in "Hello"print(i) 执行结果如下 举例二、 #打印100-999之间的水仙花数 #注意&#xff1a;Python中 / 除法&#xff0c;运输后为浮点数, // 为取除法后的整数&#xff0c;而不是C/C中的注释…

使用VM搭建Linux服务器局域网

最近在了解一些LAN相关的内容&#xff0c;抱着学习的心态就使用了VM安装Linux虚拟机进行组建LAN&#xff08;局域网&#xff09;的测试。 一、虚拟机网络规划 下面是我安装的虚拟机网络配置 虚拟机编号 IP地址 子网掩码 网络连接 1 192.168.164.100 255.255.255.0 NAT…

python实现泊松回归

1 什么是基于计数的数据&#xff1f; 基于计数的数据包含以特定速率发生的事件。发生率可能会随着时间的推移或从一次观察到下一次观察而发生变化。以下是基于计数的数据的一些示例&#xff1a; 每小时穿过十字路口的车辆数量每月去看医生的人数每月发现的类地行星数量 计数数…

RabbitMQ Tutorial

参考API : Overview (RabbitMQ Java Client 5.20.0 API) 参考文档: RabbitMQ: One broker to queue them all | RabbitMQ 目录 结构 Hello World consumer producer 创建连接API解析 创建连接工厂 生产者生产消息 消费者消费消息 队列声明 工作队列Work Queues 公平…

1033 To Fill or Not to Fill

是否有能到达的站点 无&#xff0c;输出当前距离&#xff08;最后一个到达站点距离满油箱状态下行走距离&#xff09;有 有价格更低的站点 如果油量不足以到达新站点&#xff0c;加刚好到达该站点的油量&#xff08;只加可到达范围内最便宜的油&#xff09;有价格更高的站点 在…

【带你了解下前端开发语言有那些】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

[flink 实时流基础] 输出算子(Sink)

学习笔记 Flink作为数据处理框架&#xff0c;最终还是要把计算处理的结果写入外部存储&#xff0c;为外部应用提供支持。 文章目录 **连接到外部系统****输出到文件**输出到 Kafka输出到 mysql自定义 sink 连接到外部系统 Flink的DataStream API专门提供了向外部写入数据的方…

8_springboot_shiro_jwt_多端认证鉴权_多Reaml管理

1. 目标 前面一直讨论的是只有一个Reaml的场景&#xff0c;Shiro是可以管理多个Realm的。那么什么场景下&#xff0c;我们需要定义多个Realm&#xff0c;以及Shiro框架是如何管理多个Realm的&#xff0c;他们是如何工作的。本章将会解释上面的问题&#xff0c;最后会配置前面章…

MySQL中MHA故障排查

文章目录 MySQL故障排查MySQL主从环境常见故障1、故障一1.1 故障现象1.2 报错原因1.3 解决方法 2、故障二2.1 故障现象2.2 报错原因2.3 解决方法 3、故障三3.1 故障现象3.2 报错原因3.3 解决方法 4、故障四4.1 故障现象4.2 问题分析4.3 解决方法 5、故障五5.1 故障现象5.2 报错…

neo4j使用详解(六、cypher即时时间函数语法——最全参考)

Neo4j系列导航&#xff1a; neo4j及简单实践 cypher语法基础 cypher插入语法 cypher插入语法 cypher查询语法 cypher通用语法 cypher函数语法 6.时间函数-即时类型 表示具体的时刻的时间类型函数 6.1.date函数 年-月-日时间函数&#xff1a; yyyy-mm-dd 6.1.1.获取date da…

深度学习500问——Chapter05: 卷积神经网络(CNN)(3)

文章目录 5.14 理解转置卷积与棋盘效应 5.14.1 标准卷积 5.14.2 转置卷积 5.15 卷积神经网络的参数设置 5.16 提高卷积神经网络的泛化能力 5.17 卷积神经网络在不同领域的应用 5.17 .1 联系 5.17.2 区别 5.14 理解转置卷积与棋盘效应 5.14.1 标准卷积 在理解转置卷积之前&…

从学习海底捞到学习巴奴,中国餐饮带洋快餐重归“产品主义”

俗话说“民以食为天”&#xff0c;吃饭一向是国人的头等大事&#xff0c;餐饮业也是经济的强劲助推力。新世纪以来&#xff0c;餐饮业不断讲述着热辣滚烫的商业故事。 2006年&#xff0c;拥有“必胜客”、“肯德基”等品牌的餐饮巨头百胜集团&#xff0c;组织两百多名区域经理…

代码随想录算法训练营第24天|理论基础 |77. 组合

理论基础 jia其实在讲解二叉树的时候&#xff0c;就给大家介绍过回溯&#xff0c;这次正式开启回溯算法&#xff0c;大家可以先看视频&#xff0c;对回溯算法有一个整体的了解。 题目链接/文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;带你学透回溯算法&#xff08;理…

Windows安装禅道系统结合Cpolar实现公网访问内网BUG管理服务

文章目录 前言1. 本地安装配置BUG管理系统2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射本地服务3. 测试公网远程访问4. 配置固定二级子域名4.1 保留一个二级子域名5.1 配置二级子域名6. 使用固定二级子域名远程 前言 BUG管理软件,作为软件测试工程师的必备工具之一。在…