Bracket Coloring

2023-11-05

Bracket Coloring

题意:

给出一个括号序列,定义漂亮序列为匹配括号序列或者反转之后是匹配括号序列的序列,现在要求染色,使得相同颜色的括号组成漂亮序列,问最少需要多少种颜色即每个括号染的颜色。

思路:

这里可以用栈来匹配括号序列,因为可以反转,而且要颜色最少。首先排除不合法的序列,直接输出-1。对于合法序列,不难发现,最多只需要花费两种颜色即可,先全部初始化为颜色2,对于正向匹配的括号,染成颜色1,最后判断,如果存在颜色2,说明存在逆向匹配的括号,这时候再重新初始化为2,将逆向匹配的括号染成1即可,因为正向匹配的括号不兼容逆向匹配的括号,而逆向匹配的括号兼容正向匹配的括号。
例如:)()( 这个序列,如果按照正向匹配则需要1,2两种颜色, 而逆向匹配可以全部染色成颜色1.

代码:

/*************************************************************************
    > File Name: d.cpp
    > Author: Beans
    > Mail: 3112748286@qq.com 
    > Created Time: 2023/5/26 11:37:04
 ************************************************************************/
#include <iostream>
#include <algorithm>
#include <vector>
#include <stack>
#define int long long
#define endl '\n'

using namespace std;

int n;
string s;

void solve(){
	cin >> n;cin >> s;
	s = " " + s;
	if((int)count(s.begin(), s.end(), '(') * 2 != n){cout << -1 << endl;return;}
	vector<int> ans(n + 1, 2);ans[0] = 0;
	stack<int> st;
	for(int i = 1; i <= n; i ++ )
		if(s[i] == '(')	st.push(i);
		else if (st.size())	ans[i] = 1, ans[st.top()] = 1, st.pop();
	if(count(ans.begin(), ans.end(), 2)){
		ans.assign(n + 1, 2), stack<int>().swap(st), ans[0] = 0;
		for(int i = 1; i <= n; i ++ )
			if(s[i] == ')')	st.push(i);
			else if(st.size())	ans[i] = 1, ans[st.top()] = 1, st.pop();
	}
	cout << *max_element(ans.begin(), ans.end()) << endl;
	for(int i = 1; i <= n; i ++ )	cout << ans[i] << " \n"[i == n];
}

signed main(){
	ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
	int t = 1;
	cin >> t;
	while(t -- )
		solve();
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bracket Coloring 的相关文章

随机推荐

  • 探索创意之旅:打造个人网页的精彩奇遇

    在茫茫的网络世界里 我找到了一个属于自己的小天地 那里不仅有我独特的创意 还有我内心深处的声音 我的个人网页是一段关于探索创意之旅的故事 让我带你一窥我在这个奇妙旅程中的所见所闻 声明 这个网页是使用React18 x写的 由于我平常都是使
  • MATLAB 画常见二次曲面汇总

    一 螺旋线 1 静态螺旋线 a 0 0 1 20 pi h plot3 a cos a a sin a 2 a b linewidth 2 axis 50 50 50 50 0 150 grid on set h erasemode non
  • netbeans的UI代码重新打开可视化视图

    netbeans重新打开可视化视图 视图 gt 编辑器 gt 设计
  • AJAX同步和异步

    1 AJAX 简介 1 1同步和异步 一 同步与异步 1 同步 顺序执行 优点 静态预判结果可控 缺点 耗时任务阻塞执行 2 异步 乱序执行 优点 不会阻塞代码 体验好 缺点 顺序不可控 以银行排队办业务为例 1 同步 默认排队叫号 依次办
  • [LeetCode] 01矩阵中最大矩形 Maximal Rectangle

    相关问题1 LeetCode Find max subsquare whose border values are all 1 相关问题2 LeetCode 01矩阵中最大正方形 Maximal Square Given a 2D bina
  • 微信小程序自定义键盘

    效果图 功能 如果输入 直接补0 如果是09 直接是9 如果是000那就有一个0 不能大于6位 小数点不能大于两位仅能出现一次 还有不输入是禁止支付的 不能小于0 01 失去焦点隐藏面板 光标问题有点小bug 望大佬指点 完整代码 wxml
  • react antd 实现 表格(Table)多个多选功能组件实现

    壹 功能展示和使用需求 需求描述 基于antd 实现 表格要实现多个多选互不影响包含 全选 半选 可自由拓展 功能展示 贰 封装代码 import Checkbox Table from antd import React useEffec
  • 数据挖掘中的机器学习

    1 机器学习的核心目标 从经验数据中推导出规律 学习 机器从经验数据中推导并找出规律的过程 预测 将规律应用于新数据的过程 模型 其中的规律 2 机器学习处理的问题分为监督学习和无监督学习 监督学习又可分为分类 离散 与回归 连续 3 人学
  • 空间配置器(allocator)详解-stl源码剖析学习笔记

    一 什么是空间配置器 空间配置器也就是配置空间 配置容器所需要的空间 该空间获取可以是内存 也可以是磁盘或其他存储介质 二 STL规范必要接口 stl有很多实现版本 根据stl规范 allocator的必要接口如下 类型型别 设计缘由后续章
  • 华为——查分系统

    package OJ import java util public class Bully 老师想知道从某某同学当中 分数最高的是多少 现在请你编程模拟老师的询问 当然 老师有时候需要更新某 位同学的成绩 输入描述 输入包括多组测试数据
  • Cadence 简易使用教程

    原理图的快捷键 快捷键 功能 快捷键 功能 快捷键 功能 i 添加元件 l 添加线名 x 保存并检查 c 复制 w 添加连线 S shift s 保存 m 移动 W shift w 添加粗线 u 取消上一步 M shift m 移动 断线
  • JavaScript学习笔记(11) map、reduce

    map map 方法定义在JavaScript的Array中 调用Array的map 方法 传入我们自己的函数 就可以得到结果 来一个例子 use strict function pow x return x x var arr 1 2 3
  • 已解决pip升级失败报错WARNING: There was an error checking the latest version of pip.

    已解决pip升级失败报错WARNING There was an error checking the latest version of pip 文章目录 报错问题 报错翻译 报错原因 解决方法 千人全栈VIP答疑群联系博主帮忙解决报错
  • 什么是DDoS高防?

    未接入DDoS高防 未接入高防时 源站直接对互联网暴露 一旦发生DDoS攻击 很容易导致源站瘫痪 接入DDoS高防 当您购买DDoS高防并将业务接入DDoS高防后 网站类业务把域名解析指向高防IP 非网站类的业务IP将替换成高防IP DDo
  • windows下恢复删除的逻辑分区

    以前E盘分出一部分做过linux的分区 现在E盘空间不够用了 想增加空间 就到磁盘管理中 将之前的linux的逻辑分区删除了 删除后竟然发现整个E盘都没了 再回到我的电脑 E盘也找不到了 我E盘的东西难道都就丢了吗 赶快上网查了查 找到了
  • Mac 运行VUE项目中遇到的问题

    新装好的VUE cli和Node js 使用一个不报错的vue项目进行试验 看环境是不是正常的 共出现两个问题 1 在运行npm run serve 时报错 错误如下 code encode 提示没有权限 1 进入相应文件夹 我的是 usr
  • 网络安全技术习题

    第一章 一 单选题 共6题 单选题 美国国家信息基础设施 NII 定义了信息安全的 个目标 A 五 B 四 C 三 D 二 我的答案 A正确答案 A 单选题 某银行为了加强自己的网站的安全性 决定采用一个协议 应该采用 协议 A FTP B
  • Xshell7安装教程

    一 下载 百度网盘 yyds 二 安装并和谐 1 双击 Xshell 7 0 0054 exe 安装 2 安装成功后不要启动 记得先关闭 不然和谐会失败 将文件夹 NetSarang 7 x Patch 里面的 NetSarang 7 x
  • 简单远程控制(仅传递鼠标和键盘消息)的实现

    假设两个同样的应用程序 运行在相同的操作系统上 要实现远程控制 可以使用传递鼠标和键盘的消息给对方 对方收到后解析出鼠标和键盘消息如何执行即可 下面是几处关键程序 一是处理收到消息 下面应该放在套接字接收或者串口接收中 小心下面的右键单击
  • Bracket Coloring

    Bracket Coloring 题意 给出一个括号序列 定义漂亮序列为匹配括号序列或者反转之后是匹配括号序列的序列 现在要求染色 使得相同颜色的括号组成漂亮序列 问最少需要多少种颜色即每个括号染的颜色 思路 这里可以用栈来匹配括号序列 因