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 ss. 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 ss into the minimum number of colors according to these constraints, or report that it is impossible.

正则括号序列是指:通过在原序列的字符之间插入字符 "1" 和 "+",可以将其转化为一个合法的算术表达式。例如:

  • 括号序列 "()()" 和 "(())" 是正则的(对应的表达式分别为 "(1)+(1)" 和 "((1+1)+1)");
  • 括号序列 ")(", "(" 和 ")" 不是正则的。

若一个括号序列满足以下任一条件,则称其为优美括号序列:

  • 它本身是一个正则括号序列;
  • 将该序列中字符的顺序反转后,得到的是一个正则括号序列。

例如,括号序列 "()()"、"(())"、")))((("、"))()(("` 都是优美的。

现给定一个括号序列 ss。你需要对其进行染色,使得满足以下条件:

  • 每个括号恰好被染成一种颜色;
  • 每种使用的颜色至少染了一个括号;
  • 对于每种颜色,若将该颜色的所有括号按其在原序列中出现的顺序写出,则所得括号序列是优美的。

请在满足上述约束的前提下,用最少的颜色数对给定括号序列 ss 进行染色;若不可能,请报告无解。

输入格式

The first line contains one integer tt (1≤t≤1041 \le t \le 10^4) — the number of test cases.

Each test case consists of two lines. The first line contains one integer nn (2≤n≤2⋅1052 \le n \le 2 \cdot 10^5) — the number of characters in ss. The second line contains ss — a string of nn characters, where each character is either "(" or ")".

Additional constraint on the input: the sum of nn over all test cases does not exceed 2⋅1052 \cdot 10^5.

第一行包含一个整数 tt(1≤t≤1041 \le t \le 10^4)—— 测试用例的数量。

每个测试用例由两行组成。第一行包含一个整数 nn(2≤n≤2⋅1052 \le n \le 2 \cdot 10^5)—— 字符串 ss 的长度。第二行包含字符串 ss,它由 nn 个字符组成,每个字符为 "(" 或 ")"。

输入的额外约束:所有测试用例的 nn 值之和不超过 2⋅1052 \cdot 10^5。

输出格式

For each test case, print the answer as follows:

  • if it is impossible to color the brackets according to the problem statement, print −1-1;
  • otherwise, print two lines. In the first line, print one integer kk (1≤k≤n1 \le k \le n) — the minimum number of colors. In the second line, print nn integers c1,c2,…,cnc_1, c_2, \dots, c_n (1≤ci≤k1 \le c_i \le k), where cic_i is the color of the ii-th bracket. If there are multiple answers, print any of them.

对于每个测试用例,按如下方式输出答案:

  • 如果无法按照题目要求对括号进行染色,则输出 −1-1;
  • 否则,输出两行。第一行输出一个整数 kk(1≤k≤n1 \le k \le n)—— 所需的最少颜色数;第二行输出 nn 个整数 c1,c2,…,cnc_1, c_2, \dots, c_n(1≤ci≤k1 \le c_i \le k),其中 cic_i 表示第 ii 个括号的颜色。若存在多个合法答案,输出任意一个即可。

输入输出样例

  • 输入#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测评打分。不知道怎么写?

首页