Codeforces Round #784 (Div. 4) D. Colorful Stamp题解

D. Colorful Stamp题解

题目链接

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

题目大意

给定一个长度为n的字符串,字符串初始状态都由字符“W”组成。然后可以对这个字符串进行若干次操作:将这个字符串中的两个连续的字符染色成“RB”或者“BR”,可以重复染色。
题目会给你一个长度为n的字符串,这个字符串是已经被染色了的字符串,你需要判断这个字符串能不能通过若干次染色从初始状态染色成这个状态。如果能,输出YES,否则输出NO。

解题思路

浅分析一波,先不考虑W的事儿,如果字符串长度为1,啊那直接出NO。如果长度大于等于2,如果R不是0个但是B个数为0,或者B不是0个但是R个数为0(即全是R或者全是B),那也不成。
那如果有W呢,比如说R在两段,RW、WR、BW、WB这种,啊一看就不成。还有就是RRW、BBR、BBBW、RRRW这种,出了端点的W其他全是R或者全是B,也不成。其实说白了就是前面说的那些情况端点加了一个W嘛。
那如果W在字符串中间呢,其实也一样,可以把这个字符串看成被字符“W”分割成的若干段,这不就又一样了嘛,哈哈。
总结:只要这个段里面没有出现全是R或者全是B的情况,那就成。

代码如下:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1e5+5;
char s[N];
int main()
{
    int t;
	scanf("%d",&t);
    while(t--)
    {
        int n;
        scanf("%d %s",&n,s);
        s[n]='W';
        int flag=0;
        int r=0,b=0;
        for(int i=0;i<=n&&flag==0;i++)
        {
            if(s[i]=='W'){
            	if(!r&&b||r&&!b)flag=1;
				r=0;
				b=0;
			}else{
				if(s[i]=='R')r++;
				else b++;
			}
        }
        if(flag==1) printf("NO\n");
        else printf("YES\n");
    }
    return 0;
}

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值