zoukankan      html  css  js  c++  java
  • 牛客网20181104 TI 染色

    链接:https://ac.nowcoder.com/acm/contest/176/A
    来源:牛客网

    fizzydavid和leo有n个方格排成一排,每个方格初始是白色。fizzydavid有红色染料,leo有蓝色染料。他们共进行了m次操作,在每次操作中,fizzydavid或者leo会选择若干个(可以是零个)连续相邻的方格并用自己的染料给这些格子染色。当一个格子被染成某个颜色时,这种染料会覆盖之前这个格子上的颜色。

    现在你并不知道他们每次操作选择了哪些格子,只知道每次操作是谁进行的,以及最终这n个方格的颜色。你需要判断是否存在某种选择格子的方式使得操作完之后n个方格的颜色与给定的相同。你还发现,n个格子最终都不是白色。


    首先我们求出有多少个断开的块 (左右两端的颜色与其不同)

    然后是一个贪心思想

    讲操作从后往前,每次去掉颜色色会少一个碎块

    然后特例就是只剩两个不同颜色的时候

    特判一下即可

    下面给出代码:

    #include<iostream>
    #include<cmath>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<string>
    #include<algorithm>
    using namespace std;
    inline int rd(){
       int x=0,f=1;
       char ch=getchar();
       for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-1;
       for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';
       return x*f;
    }
    inline void write(int x){
        if(x<0) putchar('-'),x=-x;
        if(x>9) write(x/10);
        putchar(x%10+'0');
        return ;
    }
    int T;
    char ch[100006];
    char s[100006];
    int main(){
        T=rd();
        while(T--){
            scanf("%s%s",ch+1,s+1);
            int x=0,y=0;
            int h1=strlen(ch+1),h2=strlen(s+1);
            for(int i=1;i<=h1;){
                if(ch[i]=='R'){
                    x++;
                    while(ch[i]=='R') i++;
                }
                else{
                    y++;
                    while(ch[i]=='B') i++;
                }
            }
            for(int i=h2;i>=1;i--){
                if(s[i]=='F'){
                    x--;
                    if(y<=1) continue;
                    y--;
                }
                else{
                    y--;
                    if(x<=1) continue;
                    x--;
                }
            }
            if(x<=0&&y<=0) printf("Yes
    ");
            else printf("No
    ");
        }
        return 0;
    }
  • 相关阅读:
    [产品设计]我对移动互联网产品的观点
    [Android阅读代码]圆形旋转菜单CircleMenu
    [Android代码阅读]分类简介
    [Android学习笔记]Android调试
    [Android]ADT Run时候报错:The connection to adb is down, and a severe error has occured
    [Android学习笔记]使用ListView
    [Android]Button按下后修改背景图
    [.NET Framework学习笔记]一些概念
    ubuntu fcitx 安装 使用
    nyoj-626-intersection set
  • 原文地址:https://www.cnblogs.com/WWHHTT/p/9911542.html
Copyright © 2011-2022 走看看