首页 > 其他分享 >D. Bracket Coloring

D. Bracket Coloring

时间:2023-11-01 19:35:08浏览次数:43  
标签:Coloring num1 int 括号 Bracket 序列

D. Bracket Coloring

题目大意:

给你一组括号序列,要求你将涂颜色括号分类,相同颜色为一组,每组括号按他们出现的顺序可以构成一个漂亮序列

如果满足以下条件之一,则括号序列称为优美序列:

  • 它是一个规则的括号序列;
  • 如果该序列中的字符顺序颠倒,它就会变成一个规则的括号序列。

思路:

首先左括号数应该等于右括号数,否则输出-1,如果本来就是一个完美序列一种颜色就够了,一般情况,按正序构成规则括号系列和反序的,只需两种颜色就可以把它分开了

code:

int n;
string s;
void solved()
{
    cin >> n;
    cin >> s;
    int num1 = count(s.begin(), s.end(), '(');
    int num2 = n - num1;
    if (num1 != num2)
    {
        cout << -1 << endl;
    }
    else
    {
        int tot = 0, op = 0, flag1 = 0, flag2 = 0;
        for (auto x : s)
        {
            if (x == '(')
            {
                tot++;
                op--;
                if (op < 0)
                    flag2 = 1;
            }
            else
            {
                tot--;
                op++;
                if (tot < 0)
                    flag1 = 1;
            }
        }
        if (flag1 == 0 || flag2 == 0)
        {
            cout << 1 << endl;
            for (int i = 0; i < n; ++i)
                cout << 1 << " ";
            cout << endl;
        }
        else
        {
            tot = 0;
            cout << 2 << endl;
            for (auto x : s)
            {
                if (x == '(')
                {
                    if (tot < 0)
                        cout << 1 << " ";
                    else
                        cout << 2 << " ";
                    tot++;
                }
                else
                {
                    tot--;
                    if (tot < 0)
                        cout << 1 << " ";
                    else
                        cout << 2 << " ";
                }
            }
            cout << endl;
        }
    }
}

标签:Coloring,num1,int,括号,Bracket,序列
From: https://www.cnblogs.com/bhxyry/p/17803908.html

相关文章

  • CF1887E Good Colorings
    矩形的四个角颜色不同是个很难描述的条件,不妨利用行列二元关系转化,将\((x,y)\)颜色为\(c\)改为在\(x\)和\(y\)之间连接边权为\(c\)的边,则四角颜色不同就被我们转化为了,存在一个边权各不相同的四元环。此时把特殊条件【初始给定\(2n\)个格子\(2n\)个不同颜色】放在......
  • CF1264D2 Beautiful Bracket Sequence
    第二次听这道题,写个推导过程。考虑对于给定的括号序列如何算答案,考虑最终答案对应回原序列的位置,于是我们要找到一个位置让其左边的左括号与右边的右括号一样多。因为挪指针时两者之一一定变化,并且两边均单调,所以这个分界点是唯一的。考虑枚举分界点算答案。假设左边有\(x\)个......
  • 题解 Coloring Brackets
    题目链接对于括号问题,考虑区间\(dp\)。这道题的括号序列是固定的,所以直接找出每个括号对应的括号在进行转化即可。设\(f_{l,r,0/1/2,0/1/2}\)表示\(l\simr\),左括号不染色/染红色/染蓝色,右括号不染色/染红色/染蓝色的方案数。若\(l,r\)是一对匹配括号,那么f_{l,r}便可以......
  • ARC063F Snuke's Coloring 2
    Day\(4!\)。首先容易找到周长为\(2(w+1)\)和\(2(h+1)\)的矩形,所以答案下界是\(2(\max(w,h)+1)\)。考虑按照整个矩形中心坐标,将矩形分成\(4\)个子矩形,观察到若有矩形完全包含于其中一个子矩形,则其周长必不超过\(2\max(w,h)\),必然不是最优解。所以最优解一定被直线\(2x=......
  • arc120D - Bracket Score 2
    D-BracketScore2看了题解之后发现自己是弱智如果能够猜到答案就是前n大-前n小,那么这题就解决了,直接用一个栈模拟匹配即可。#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<queue>#definefo(i,a,b)for(int(i)=(a);(i)<=(b);(i)++)......
  • CF662B Graph Coloring
    很一眼的题考虑枚举最后所有边的颜色,然后每个点是否变化可以用一个bool变量表示,就是个很典的2-SAT问题,根据当前边和目标的颜色相同与否连边即可但这题的难点在于要找一个操作次数最少的方案,乍一看很难搞但如果你对图论和2-SAT那一套理解比较深的话就很容易发现,这道题中所有边都......
  • gym104531 I Bracket
    题意题面做法结论:对于字符串\(s\),其为合法括号序列的充要条件为(1)\(|s|\)为偶数,(2)构造序列\(a_i\),若\(s_i\)='('or'?',则\(a_i=+1\);若\(s_i\)=')',则\(a_i=-1\),\({a_i}\)的前缀和均\(\ge0\)(3)构造序列\(b_i\),若\(s_i=\)')'or'?'......
  • 软件测试|好用的pycharm插件推荐(三)——Rainbow Brackets
    简介我们平时写代码的时候,括号是让我们非常头疼的地方,特别是代码逻辑很多,层层嵌套的情况。一眼很难看出,代码是从哪个括号开始,到哪个反括号结束的。这个时候要是有一款工具能够让我们一眼就看出代码从哪个括号开始,到哪个反括号结束,无疑对我们会有很大帮助。PyCharmRainbowBracket......
  • 1154 Vertex Coloring
    题目A propervertexcoloring isalabelingofthegraph'sverticeswithcolorssuchthatnotwoverticessharingthesameedgehavethesamecolor.Acoloringusingatmost k colorsiscalleda(proper) k-coloring.Nowyouaresupposedtotellifagi......
  • CF670E Correct Bracket Sequence Editor
    思路发现此题除了模拟没有好的方法,所以考虑如何模拟。先考虑删除操作,如果在删除的时候再去找要删除那些的话,就会使时间复杂度变高,所以考虑先预处理出每个括号对应的位置。如果按照操作删除括号,那么时间复杂度也是非常吓人的。所以我们考虑标记被删除的括号。再考虑移动操作,如果......