CF1970A1.Balanced Shuffle (Easy)

入门

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

括号序列是仅由字符“(”和“)”组成的字符串,例如“(()((”。

平衡括号序列是指可以通过在其中插入数字和运算符后成为有效数学表达式的括号序列,例如“(()(()))”。

括号序列的平衡度定义为左括号“(”的数量减去右括号“)”的数量。例如,序列“(()((”的平衡度为 33。

平衡括号序列也可以定义为平衡度为 00,且其每一个前缀的平衡度都不为负数的括号序列。

我们定义“平衡洗牌”操作如下:对于一个括号序列,首先,对于序列中的每一个字符,计算该字符之前的前缀的平衡度,并将其与该字符在原序列中的位置一起记录在表格中。例如:

前缀平衡度0 1 2 1 2 3 2 1位置1 2 3 4 5 6 7 8字符(()(()))\begin{aligned} \text{前缀平衡度} &\quad 0\ 1\ 2\ 1\ 2\ 3\ 2\ 1 \\ \text{位置} &\quad 1\ 2\ 3\ 4\ 5\ 6\ 7\ 8 \\ \text{字符} &\quad ( ( ) ( ( ) ) ) \end{aligned}

然后,将表格的列按照前缀平衡度升序排序,若平衡度相同,则按位置降序排序。在上述例子中,排序后得到:

前缀平衡度0 1 1 1 2 2 2 3位置8 7 4 1 5 3 2 6字符))((()()\begin{aligned} \text{前缀平衡度} &\quad 0\ 1\ 1\ 1\ 2\ 2\ 2\ 3 \\ \text{位置} &\quad 8\ 7\ 4\ 1\ 5\ 3\ 2\ 6 \\ \text{字符} &\quad ) ) ( ( ( ) ( ) \end{aligned}

表格最后一行的字符依次组成新的括号序列,在本例中为“()(()())”。这个序列称为对原序列应用平衡洗牌操作的结果,简称为该序列的平衡洗牌。

给定一个平衡括号序列,请输出它的平衡洗牌。

输入格式

输入仅一行,包含一个只由“(”和“)”组成的字符串 ss。保证该字符串是非空的平衡括号序列,且长度不超过 500 000500\,000。

输出格式

输出括号序列 tt,即 ss 的平衡洗牌。

输入输出样例

  • 输入#1

    (()(()))

    输出#1

    ()(()())

说明/提示

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页