CF1837D.Bracket Coloring
普及/提高-
通过率:0%
时间限制:2.00s
内存限制:512MB
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
A regular bracket sequence is a bracket sequence that can be transformed into a correct arithmetic expression by inserting characters "1" and "+" between the original characters of the sequence. For example:
- the bracket sequences "()()" and "(())" are regular (the resulting expressions are: "(1)+(1)" and "((1+1)+1)");
- the bracket sequences ")(", "(" and ")" are not.
A bracket sequence is called beautiful if one of the following conditions is satisfied:
- it is a regular bracket sequence;
- if the order of the characters in this sequence is reversed, it becomes a regular bracket sequence.
For example, the bracket sequences "()()", "(())", ")))(((", "))()((" are beautiful.
You are given a bracket sequence s. You have to color it in such a way that:
- every bracket is colored into one color;
- for every color, there is at least one bracket colored into that color;
- for every color, if you write down the sequence of brackets having that color in the order they appear, you will get a beautiful bracket sequence.
Color the given bracket sequence s into the minimum number of colors according to these constraints, or report that it is impossible.
正则括号序列是指:通过在原序列的字符之间插入字符 "1" 和 "+",可以将其转化为一个合法的算术表达式。例如:
- 括号序列
"()()"和"(())"是正则的(对应的表达式分别为"(1)+(1)"和"((1+1)+1)"); - 括号序列
")(","("和")"不是正则的。
若一个括号序列满足以下任一条件,则称其为优美括号序列:
- 它本身是一个正则括号序列;
- 将该序列中字符的顺序反转后,得到的是一个正则括号序列。
例如,括号序列 "()()"、"(())"、")))((("、"))()(("` 都是优美的。
现给定一个括号序列 s。你需要对其进行染色,使得满足以下条件:
- 每个括号恰好被染成一种颜色;
- 每种使用的颜色至少染了一个括号;
- 对于每种颜色,若将该颜色的所有括号按其在原序列中出现的顺序写出,则所得括号序列是优美的。
请在满足上述约束的前提下,用最少的颜色数对给定括号序列 s 进行染色;若不可能,请报告无解。
输入格式
The first line contains one integer t (1≤t≤104) — the number of test cases.
Each test case consists of two lines. The first line contains one integer n (2≤n≤2⋅105) — the number of characters in s. The second line contains s — a string of n characters, where each character is either "(" or ")".
Additional constraint on the input: the sum of n over all test cases does not exceed 2⋅105.
第一行包含一个整数 t(1≤t≤104)—— 测试用例的数量。
每个测试用例由两行组成。第一行包含一个整数 n(2≤n≤2⋅105)—— 字符串 s 的长度。第二行包含字符串 s,它由 n 个字符组成,每个字符为 "(" 或 ")"。
输入的额外约束:所有测试用例的 n 值之和不超过 2⋅105。
输出格式
For each test case, print the answer as follows:
- if it is impossible to color the brackets according to the problem statement, print −1;
- otherwise, print two lines. In the first line, print one integer k (1≤k≤n) — the minimum number of colors. In the second line, print n integers c1,c2,…,cn (1≤ci≤k), where ci is the color of the i-th bracket. If there are multiple answers, print any of them.
对于每个测试用例,按如下方式输出答案:
- 如果无法按照题目要求对括号进行染色,则输出 −1;
- 否则,输出两行。第一行输出一个整数 k(1≤k≤n)—— 所需的最少颜色数;第二行输出 n 个整数 c1,c2,…,cn(1≤ci≤k),其中 ci 表示第 i 个括号的颜色。若存在多个合法答案,输出任意一个即可。
输入输出样例
输入#1
4 8 ((())))( 4 (()) 4 ))(( 3 (()
输出#1
2 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 1 1 1 -1
输入解题思路,AI测评打分。不知道怎么写?