太阳之华 连通块计数

C-太阳之华_牛客小白月赛89 (nowcoder.com)

思路:可以发现,最多经过一次操作就能知道结果:

  • 全是蓝色:蓝方胜
  • 全是红色:红方胜
  • 红方经过一次操作:
    • 存在一个连通块扩散等于蓝色个数:红方胜
    • 否则,红蓝一直重复进行,平局

因此,对棋盘进行一次遍历,将所有红色连通块全部找出来并记上标记(类似并查集判定连通块)。之后再对每个连通块扩散吞食掉的蓝块进行计数,由于需要考虑一个连通块中不同红块对同一个蓝块的重复影响,这里用set进行去重。

之后对每个连通块扩散的蓝色个数进行判定即可得到答案。

代码如下:

#include <bits/stdc++.h>
using namespace std;
int fx[] = {0, 0, 1, -1};
int fy[] = {1, -1, 0, 0};
void solve() {int n,m; cin>>n>>m;vector<string> ph(n);vector<vector<int>> rcd(n, vector<int>(m, 0));for(auto &t: ph) cin>>t;int cnt = 1;int cntb = 0;for(int i = 0; i < n; ++i) {for(int j = 0; j < m; ++j) {cntb += (ph[i][j] == '.');}}// 全蓝:蓝色胜利if(cntb == n * m) {cout<<"Blue\n";return ;}// 找到所有的红色联通块for(int i = 0; i < n; ++i) {for(int j = 0; j < m; ++j) {if(rcd[i][j]) continue;if(ph[i][j] == '#') {auto dfs = [&](auto &&self, int x, int y, int id) -> void {rcd[x][y] = id;for(int i = 0; i < 4; ++i) {int xx = x + fx[i], yy = y + fy[i];if(xx < 0 || xx >= n || yy < 0 || yy >= m) continue;if(rcd[xx][yy] || ph[xx][yy] == '.') continue;self(self, xx, yy, id);}};dfs(dfs, i, j, cnt++);}}}// 记录每个红色联通块周围的蓝块数set<pair<int,int>> se[cnt];for(int i = 0; i < n; ++i) {for(int j = 0; j < m; ++j) {if(ph[i][j] == '.') continue;for(int k = 0; k < 4; ++k) {int x = i + fx[k], y = j + fy[k];if(x < 0 || x >= n || y < 0 || y >= m) continue;if(ph[x][y] == '.') se[rcd[i][j]].insert({x, y});}}}// 红色联通块周围的蓝色块数等于总蓝色块数:红色胜利for(int i = 1; i < cnt; ++i) {if(se[i].size() == cntb) {cout<<"Red\n";return ;}}// 否则,将会一直重复进行,平局cout<<"Draw\n";
}
int main()
{int t; cin>>t;while(t--) {solve();}
}

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

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

相关文章

2024年最新阿里云服务器价格表(配置价格+带宽价格+磁盘)

2024年腾讯云服务器优惠价格表&#xff0c;一张表整理阿里云服务器最新报价&#xff0c;阿里云服务器网整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单&#xff0c;大家也可以直接移步到阿里云CLUB中心查看 aliyun.club 当前最新的云服务器优惠券…

爬楼梯C语言

方法一&#xff1a;动态规划 int climbStairs(int n) {int f[100] {0};f[0] 0;f[1] 1;f[2] 2;for(int i 3;i<n;i)f[i] f[i-1] f[i-2];//可能是从i-1阶爬上第i阶&#xff0c;也有可能是从i-2阶 return f[n]; } 方法二&#xff1a;滚动数组 int climbStairs(int n){int…

覃超老师 算法面试通关40讲

教程介绍 无论是阿里巴巴、腾讯、百度这些国内一线互联网企业&#xff0c;还是 Google、Facebook、Airbnb 等硅谷知名互联网公司&#xff0c;在招聘工程师的过程中&#xff0c;对算法和数据结构能力的考察都是重中之重。本课程以帮助求职者在短时间内掌握面试中最常见的算法与…

笔记:Mysql数据库删除报错 1008

说明 mysql> show databases; -------------------- | Database | -------------------- | information_schema | | mysql | | performance_schema | | sys | | test | -------------------- 5 rows in set (0.02 sec…

[AIGC] Redis基础命令集详细介绍

Redis是一个强大的开源的键-值存储系统&#xff0c;被广泛应用于各种应用程序中。在使用Redis时&#xff0c;我们需要掌握一些基本的Redis命令来操作存储在其上的数据。这篇文章将向你介绍一些基本的Redis命令&#xff0c;让你能够更好地使用和理解Redis。 文章目录 启动Redis…

【云开发笔记No.13】Jenkins和持续集成

一、Jenkins的概念 Jenkins是一个开源的持续集成工具&#xff0c;用于自动化软件开发过程中的各种任务&#xff0c;包括编译、测试、打包、部署等。它提供了一个可扩展的平台&#xff0c;通过插件机制支持多种开发语言和构建工具。Jenkins的主要目标是帮助软件开发团队提高开发…

代码随想录算法训练营第十八天|找树左下角的节点

513. 找树左下角的值 已解答 中等 相关标签 相关企业 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1示例 2: 输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7提示: 二…

python写爬虫爬取京东商品信息

工具库 爬虫有两种方案&#xff1a; 第一种方式是使用request模拟请求&#xff0c;并使用bs4解析respond得到数据。第二种是使用selenium和无头浏览器&#xff0c;selenium自动化操作无头浏览器&#xff0c;由无头浏览器实现请求&#xff0c;对得到的数据进行解析。 第一种方…

因特网服务

▶1.网页服务 WWW(万维网)的信息资源分布在全球近10亿个网站上&#xff0c;网站的服务内容由ICP(因特网信息提供商)进行发布和管理&#xff0c;用户通过浏览器软件(如IE),就可浏览到网站上的信息&#xff0c;网站主要采用网页的形式进行信息描述和组织&#xff0c;网站是多个网…

C#绘制面形图

创建windows窗体应用 ,从工具箱添加Button和Panel using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Fo…

draw.io 去除箭头

问题 draw.io 去除箭头 详细问题 笔者使用draw.io绘制流程图&#xff0c;需要没有箭头的连接器&#xff0c;但是General所提供的连接器添加了尾部箭头&#xff0c;如何取消尾部箭头? 解决方案 1、点击选中选择连接器&#xff08;箭头1&#xff09;。在格式面板的“Style…

【Transformer】transformer注解

every blog every motto: You can do more than you think. 0. 前言 transformer注解 在过去的一年里&#xff0c;《Attention is all you need》中的transformer一直萦绕在很多人的脑海里。除了在翻译质量上产生重大改进之外&#xff0c;它还为许多其他NLP任务提供了一种新的…

AOP原理和切面应用

1 概述 我们所说的Aop(即面向切面编程),即面向接口,也面向方法,在基于IOC的基础上实现。 Aop最大的特点是对指定的方法进行拦截并增强,这种增强的方式不需要业务代码进行调整,无需侵入到业务代码中,使业务与非业务处理逻辑分离。 以Spring举例,通过事务的注解配置,S…

C++ 基本运算

何谓运算符和操作数 基本运算 1、双目运算 2、单目运算 3、赋值表达式 表达形式&#xff1a; <变量><表达式>; 表达式是指各种运算符把常量、变量&#xff0c;函数等运算对象连接起来的具有实际意义并符合C语法规则的式子。赋值是指表达式的值赋给一个变量。 …

【小程序开发】位置 API 集合(二)

ty.map.openGeofenceMap 打开地理围栏地图页面,获取地理围栏信息(新建或者编辑地理围栏) 权限: [scope.location] 需引入MapKit&#xff0c;且在>3.0.1版本才可使用 参数 Object object 属性类型默认值必填说明geoTitlestring否地理围栏名称longitudenumber否经度latitu…

HTTP协议中的身份验证和授权机制,以及现代认证技术(OAuth 2.0、JWT、OpenID Connect)

概念 身份验证&#xff08;Authentication&#xff09; 身份验证是确定用户或实体是否为其声称的身份的过程。在任何需要限制访问权限的系统中&#xff0c;身份验证都是第一道防线。通过身份验证&#xff0c;系统能够识别用户的身份&#xff0c;并据此提供相应的服务和数据访…

手撕算法-删除链表的倒数第 N 个结点

描述 思路 快慢指针&#xff0c;快指针先走N步&#xff0c;走不够N步返回空。慢指针和快指针一起走&#xff0c;当快指针到达终点&#xff0c;即快指针为null时&#xff0c;慢指针到达倒数第N个节点。因为要删除倒数第N个&#xff0c;所以要记录之前的节点pre&#xff0c;假设…

SP 2023

44th IEEE Symposium on Security and Privacy, SP 2023, San Francisco, CA, USA, May 21-25, 2023. 第44届IEEE安全与隐私研讨会&#xff0c;SP 2023&#xff0c;美国加利福尼亚州旧金山&#xff0c;2023年5月21-25日。 1 Space Odyssey: An Experimental Software Security…

python--list容器、列表

1.python官方内置的容器 list: set: tuple: dict: 弱数据类语言通通没有数组&#xff0c;因为数组指的是 类型固定、大小固定、连续的内存空间。 2.链表&#xff1a; 非连续内存空间 python用的是双向链表 单向链表&#xff1a;优点&#xff1a;不浪费内存&#xf…

无人机图像识别与分析

无人机图像识别与分析是无人机技术应用的一个重要方向&#xff0c;涉及到计算机视觉、机器学习和模式识别等多个技术领域。以下是无人机图像识别与分析的一般流程和关键技术&#xff1a; 1. 图像获取 使用无人机搭载的高清摄像头、热成像相机或其他特殊传感器&#xff0c;在不…