CF——1766C - Hamiltonian Wall

news2024/11/16 12:54:57

题目链接

1766C - Hamiltonian Wall Rating:1300

题目描述

Sir Monocarp Hamilton is planning to paint his wall. The wall can be represented as a grid, consisting of 2 rows and m columns. Initially, the wall is completely white.

Monocarp wants to paint a black picture on the wall. In particular, he wants cell (i,j) (the j-th cell in the i-th row) to be colored black, if ci,j= ‘B’, and to be left white, if ci,j= ‘W’. Additionally, he wants each column to have at least one black cell, so, for each j, the following constraint is satisfied: c1,j, c2,j or both of them will be equal to ‘B’.

In order for the picture to turn out smooth, Monocarp wants to place down a paint brush in some c e l l ( x 1 , y 1 ) cell (x1,y1) cell(x1,y1) and move it along the path ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x k , y k ) (x1,y1),(x2,y2),…,(xk,yk) (x1,y1),(x2,y2),,(xk,yk) so that:

  • for each i, (xi,yi) and (xi+1,yi+1) share a common side;
  • all black cells appear in the path exactly once;
  • white cells don’t appear in the path.

Determine if Monocarp can paint the wall.

Input

The first line contains a single integer t t t ( 1 ≤ t ≤ 1 0 4 1≤t≤10^4 1t104) — the number of testcases.

The first line of each testcase contains a single integer m ( 1 ≤ m ≤ 2 ⋅ 1 0 5 ) m (1≤m≤2⋅10^5) m(1m2105) — the number of columns in the wall.

The i-th of the next two lines contains a string ci, consisting of m characters, where each character is either ‘B’ or ‘W’. ci,j is ‘B’, if the c e l l ( i , j ) cell (i,j) cell(i,j) should be colored black, and ‘W’, if the c e l l ( i , j ) cell (i,j) cell(i,j) should be left white.

Additionally, for each j, the following constraint is satisfied: c1,j, c2,j or both of them are equal to ‘B’.

The sum of m over all testcases doesn’t exceed 2 ⋅ 1 0 5 2⋅10^5 2105.

Output

For each testcase, print "YES"if Monocarp can paint a wall. Otherwise, print "NO".

inputCopy

6
3
WBB
BBW
1
B
B
5
BWBWB
BBBBB
2
BW
WB
5
BBBBW
BWBBB
6
BWBBWB
BBBBBB

outputCopy

YES
YES
NO
NO
NO
YES

大致题意:
每次给你一个 2行 m列 的字符数组s。 s [ i ] [ j ] = = ′ B ′ s[i][j] == 'B' s[i][j]==B 代表这一块是黑色, s [ i ] [ j ] = = ′ W ′ s[i][j] == 'W' s[i][j]==W 代表这一块是白色。

问是否存在一条路径包括了所有的黑色块,每个黑色块只在这条路径上出现一次。存在就打印 YES,否则打印NO

这个例子存在这样的一条路径,所以打印 YES:

在这里插入图片描述

以下这个例子就不存在,所以打印NO

在这里插入图片描述

我们定义 f ( i , j ) ( 1 < = i < = 2 , 1 < = j < = n ) f(i,j) (1<=i<=2,1<=j<=n) f(i,j)(1<=i<=2,1<=j<=n) 为到达点 ( i , j ) (i,j) (i,j)的路径中包含的黑色块的数量。

最后我们只需要判断 m a x ( f ( 1 , n ) , f ( 2 , n ) ) = = 总的黑色块数量 max(f(1,n),f(2,n)) == 总的黑色块数量 max(f(1,n),f(2,n))==总的黑色块数量,如果等于说明确实存在这样一条路径;否则不存在。

分情况讨论:

s [ 1 ] [ j ] = = ′ B ′ s[1][j] == 'B' s[1][j]==B 时,有以下三种情况:

在这里插入图片描述

  • f [ 1 ] [ j − 1 ] = = ′ B ′ a n d f [ 2 ] [ j − 1 ] = = ′ B ′ f[1][j-1]=='B' and f[2][j-1] == 'B' f[1][j1]==Bandf[2][j1]==B时, f [ 1 ] [ j ] = f [ 1 ] [ j − 1 ] + 1 f[1][j] = f[1][j-1]+1 f[1][j]=f[1][j1]+1
  • f [ 1 ] [ j − 1 ] = = ′ B ′ f[1][j-1]=='B' f[1][j1]==B时, f [ 1 ] [ j ] = f [ 1 ] [ j − 1 ] + 1 f[1][j] = f[1][j-1]+1 f[1][j]=f[1][j1]+1
  • f [ 2 ] [ j − 1 ] = = ′ B ′ f[2][j-1]=='B' f[2][j1]==B时,这种情况不符合要求,忽略。

s [ 2 ] [ j ] = = ′ B ′ s[2][j] == 'B' s[2][j]==B 时,有以下三种情况:

在这里插入图片描述

  • f [ 1 ] [ j − 1 ] = = ′ B ′ a n d f [ 2 ] [ j − 1 ] = = ′ B ′ f[1][j-1]=='B' and f[2][j-1] == 'B' f[1][j1]==Bandf[2][j1]==B时, f [ 2 ] [ j ] = f [ 2 ] [ j − 1 ] + 1 f[2][j] = f[2][j-1]+1 f[2][j]=f[2][j1]+1
  • f [ 1 ] [ j − 1 ] = = ′ B ′ f[1][j-1]=='B' f[1][j1]==B时,这种情况不符合要求,忽略。
  • f [ 2 ] [ j − 1 ] = = ′ B ′ f[2][j-1]=='B' f[2][j1]==B时, f [ 2 ] [ j ] = f [ 2 ] [ j − 1 ] + 1 f[2][j] = f[2][j-1]+1 f[2][j]=f[2][j1]+1

f [ 1 ] [ j − 1 ] = = ′ B ′ a n d f [ 2 ] [ j − 1 ] = = ′ B ′ f[1][j-1]=='B' and f[2][j-1] == 'B' f[1][j1]==Bandf[2][j1]==B时,有以下四种情况:

在这里插入图片描述

  • f [ 1 ] [ j − 1 ] = = ′ B ′ a n d f [ 2 ] [ j − 1 ] = = ′ B ′ f[1][j-1]=='B' and f[2][j-1] == 'B' f[1][j1]==Bandf[2][j1]==B时,
    • f [ 1 ] [ j ] = m a x ( f [ 1 ] [ j − 1 ] + 1 , f [ 2 ] [ j − 1 ] + 2 ) f[1][j] = max(f[1][j-1] + 1,f[2][j-1] + 2) f[1][j]=max(f[1][j1]+1,f[2][j1]+2)
    • f [ 2 ] [ j ] = m a x ( f [ 1 ] [ j − 1 ] + 2 , f [ 2 ] [ j − 1 ] + 1 ) f[2][j] = max(f[1][j-1] + 2,f[2][j-1] + 1) f[2][j]=max(f[1][j1]+2,f[2][j1]+1)
  • f [ 1 ] [ j − 1 ] = = ′ B ′ f[1][j-1]=='B' f[1][j1]==B时,
    • f [ 1 ] [ j ] = f [ 1 ] [ j − 1 ] + 1 f[1][j] = f[1][j-1] + 1 f[1][j]=f[1][j1]+1
    • f [ 2 ] [ j ] = f [ 1 ] [ j − 1 ] + 2 f[2][j] = f[1][j-1] + 2 f[2][j]=f[1][j1]+2
  • f [ 2 ] [ j − 1 ] = = ′ B ′ f[2][j-1]=='B' f[2][j1]==B时,
    • f [ 1 ] [ j ] = f [ 2 ] [ j − 1 ] + 2 f[1][j] = f[2][j-1] + 2 f[1][j]=f[2][j1]+2
    • f [ 2 ] [ j ] = f [ 2 ] [ j − 1 ] + 1 f[2][j] = f[2][j-1] + 1 f[2][j]=f[2][j1]+1

时间复杂度: O ( n ) O(n) O(n)

代码:

#include <iostream>
#include<algorithm>
#include<vector>
#include<cstring>


using namespace std;

const int N = 2e5+10;
char s[3][N];
int f[3][N];

void solve(){
    int n;
    scanf("%d",&n);
    for(int i = 1;i <= 2;i++){
        scanf("%s",s[i] + 1);
    }
    
    memset(f,0,sizeof f);
    
    int cnt = 0;
    for(int i = 1;i <= 2;i++){
        for(int j = 1;j <= n;j++){
            if(s[i][j] == 'B') cnt++;
        }
    }

    if(s[1][1] == 'B'&& s[2][1] == 'B'){
        f[1][1] = 1;
        f[2][1] = 1;
    }
    
    for(int j = 2;j <= n;j++){
        if(s[1][j] == 'B' && s[2][j] == 'B'){
            if(s[1][j-1] == 'B' && s[2][j-1] == 'B'){
                f[1][j] = max(f[1][j-1] + 1,f[2][j-1] + 2);
                f[2][j] = max(f[1][j-1] + 2,f[2][j-1] + 1);
            }
            else if(s[1][j-1] == 'B'){
                f[1][j] = f[1][j-1] + 1;
                f[2][j] = f[1][j-1] + 2;
            }
            else if(s[2][j-1] == 'B'){
                f[1][j] = f[2][j-1] + 2;
                f[2][j] = f[2][j-1] + 1;
            }
        }
        else if(s[1][j] == 'B'){
            if(s[1][j-1] == 'B' && s[2][j-1] == 'B') f[1][j] = f[1][j-1]+1;
            else if(s[1][j-1] == 'B') f[1][j] = f[1][j-1] + 1;
        }
        else if(s[2][j] == 'B'){
            if(s[1][j-1] == 'B' && s[2][j-1] == 'B') f[2][j] = f[2][j-1]+1;
            else if(s[2][j-1] == 'B') f[2][j] = f[2][j-1] + 1;
        }
    }

    
    int ans = max(f[1][n],f[2][n]);
    //ans 相当于是连接 这个cnt个黑色块的边数 所以要+1 才是黑色块的数量
    if(cnt == ans+1) puts("YES");
    
    else puts("NO");
}

int main() {
  int t;
  cin>>t;
  while(t--){
      solve();
  }
  return 0;
} 

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

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

相关文章

Leetcode力扣秋招刷题路-0101

从0开始的秋招刷题路&#xff0c;记录下所刷每道题的题解&#xff0c;帮助自己回顾总结 101. 对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 示例 2&#xff1…

[LeetCode周赛复盘] 第 330 场周赛20230129

[LeetCode周赛复盘] 第 330 场周赛20230129 一、本周周赛总结二、 [Easy] 6337. 统计桌面上的不同数字1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6338. 猴子碰撞的方法数1. 题目描述2. 思路分析3. 代码实现四、[Hard] 6339. 将珠子放入背包中1. 题目描述2. 思路分析3. 代…

过年了,给网站加个灯笼+飘雪效果!

过年了&#xff0c;下面分享一个网站的特效&#xff0c;给网站添加一个新春灯笼和飘雪的效果&#xff0c;过年期间多一点年味。灯笼特效下面是css样式&#xff0c;可以放在公共样式中&#xff1a;.deng-box{position:fixed;top:-40px;right:150px;z-index:9999;pointer-events:…

【音视频工具】前端屏幕录制工具 + 录制<video>标签内容

一、录制的实现思路 1.开始录制、停止录制、下载视频 2.Blob介绍 3.概念 var mediaRecord //用于录制视频 var mediaStream //视频流 var videoBuffer [] //保存的视频数据二、屏幕录制工具 下载地址&#xff1a; https://chrome.google.com/webstore/detail/tampermonkey…

k8s之POD资源限制和健康监测

写在前面 本文一起看下POD的资源限制配置和健康监测的相关内容。 1&#xff1a;资源限制 如果是不对POD设置资源限制的话&#xff0c;若任由其占用系统资源&#xff0c;可能会造成非常严重的后果&#xff0c;所以我们需要根据具体情况来设置资源限制&#xff0c;如使用多少内…

怎样把截图转换成文字?三分钟教会你如何截图转文字

在日常的学习中&#xff0c;当你在网上看到一篇文章&#xff0c;而当中的某一段话很适合拿来用在自己的写作上&#xff0c;但是你却无法直接将其复制粘贴下来&#xff0c;只能先截图下来再手动输入&#xff0c;这种方法虽然可行&#xff0c;但比较消耗时间和精力&#xff0c;那…

详细图解LeetCode经典链表算法题

文章目录链表类型算法题一、链表介绍本文使用的Java中链表类&#xff1a;二、链表基础题1、数组转链表代码&#xff1a;测试&#xff1a;2、单链表翻转题目&#xff1a;代码&#xff1a;解析&#xff1a;测试&#xff1a;补充&#xff1a;3、合并两个有序链表题目&#xff1a;解…

顺应信创发展,君子签电子签章方案全面适配信创环境

信创产业作为战略性新兴产业&#xff0c;近年来&#xff0c;国家不断出台相关政策对行业的发展进行支持。 2018年我国首次将信创纳入国家战略&#xff0c;并提出了 “28N”应用体系&#xff0c;信创发展步入“快车道”&#xff1b;2020年起&#xff0c;信创产业由党政逐渐向其…

垃圾收集器必问系列—ZGC

本文已收录至Github&#xff0c;推荐阅读 &#x1f449; Java随想录 人的一切痛苦&#xff0c;本质上都是对自己的无能的愤怒。——王小波 文章目录Region布局读屏障染色指针染色指针的优势运作过程ZGC的优缺点ZGC有人称它为Zero GC&#xff0c;其实“Z”并非什么专业名词的缩写…

vue前端框架课程笔记(二)

目录计算属性问题引入插值语法实现methods配置属性实现computed配置属性一些问题getter与setter注意监视属性问题引入computed和methods实现watch属性watch属性简介computed与watch的比较注意本博客参考尚硅谷官方课程&#xff0c;详细请参考 【尚硅谷bilibili官方】 本博客以…

千峰网络安全笔记(前三讲)

典中典 《c语言从研发到脱发》 《C从入门到放弃》 《Java从跨平台到跨行业》 《Ios开发从入门到下架》 《Android开发大全——从开始到转行》 《PHP由初学至搬砖》 《黑客攻防:从入门到入狱》 《Mysql从删库到跑路》 《服务器运维管理从网络异常到硬盘全红》 《服务器运维管理…

CentOS 8 中dnf管理器如何仅下载不安装软件

在某些情况下&#xff0c;我们希望从命令行下载特定或一组 RPM 包而不安装它。虽然我们可以使用 wget 命令下载&#xff0c;但 wget 不会下载安装包的依赖项。在 CentOS 8 中DNF&#xff08;或 yum&#xff09;是一个命令行包管理工具。使用 DNF我们可以安装、更新和删除 rpm 包…

HTTP协议学习

一、http请求协议1、常见请求头accept:浏览器通过这个头告诉服务器&#xff0c;它所支持的数据类型Accept-Charset: 浏览器通过这个头告诉服务器&#xff0c;它支持哪种字符集Accept-Encoding&#xff1a;浏览器通过这个头告诉服务器&#xff0c;支持的压缩格式Accept-Language…

114.简单的动态切换app的图标

1.第一步 通过activity-alias别名实现&#xff0c;manifest 这里写的是一个默认的图标Default和一个需要切换的图标Test&#xff0c;以及一个默认的首页面HomeActivity&#xff1a; <!-- 默认的图标--> <activity-aliasandroid:name".activity.Default"and…

C语言入门教程||C语言 运算符||C语言 判断

C语言 运算符 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C 语言内置了丰富的运算符&#xff0c;并提供了以下类型的运算符&#xff1a; 算术运算符关系运算符逻辑运算符位运算符赋值运算符杂项运算符 本章将逐一介绍算术运算符、关系运算符、逻辑运算符、位运算…

基于android的大学生图书管理系统app

需求信息&#xff1a; 1.学生用户端 查询图书。学生用户可以对馆内图书资料进行简单和高级的查询。 预约图书。当查询时发现要借阅的图书已被借阅&#xff0c;可以提前预约。 挂失图书。图书不慎丢失&#xff0c;可以在学生端实现挂失。 2.管理员端 学生用户管理。管理员可以对…

LeetCode——2309. 兼具大小写的最好英文字母

一、题目 给你一个由英文字母组成的字符串 s &#xff0c;请你找出并返回 s 中的最好英文字母。返回的字母必须为大写形式。如果不存在满足条件的字母&#xff0c;则返回一个空字符串。 最好 英文字母的大写和小写形式必须 都 在 s 中出现。 英文字母 b 比另一个英文字母 a …

Python 操作pdf(pdfplumber读取PDF写入Exce)

1. Python 操作pdf(pdfplumber读取PDF写入Exce) 1.1 安装pdfplumber模块库: 安装pdfplumber: pip install pdfplumber 复制代码 pdfplumber.PDF类 pdfplumber.PDF类表示单个PDF ,并具有两个主要属性: 属性说明pdf.metadata从PDF的Info中获取元数据键/值对字典。通常包括&q…

【HBase——陌陌海量存储案例】4. Apache Phoenix 介绍与安装

5. 性能问题 Hbase默认只支持对行键的索引&#xff0c;那么如果要针对其它的列来进行查询&#xff0c;就只能全表扫描之前介绍的查询是使用scan filter组合来进行查询的&#xff0c;但查询地效率不高&#xff0c;因为要进行顺序全表扫描而没有其他索引。如果数据量较大&#…

51单片机学习笔记-8 DS1302实时时钟

8 DS1302实时时钟 [toc] 注&#xff1a;笔记主要参考B站江科大自化协教学视频“51单片机入门教程-2020版 程序全程纯手打 从零开始入门”。 8.1 芯片介绍&#xff1a;DS1302 RTC(Real Time Clock)实时时钟&#xff0c;是一种集成电路&#xff0c;通常称为时钟芯片。常见的时…