CF1657C Bracket Sequence Deletion
题目描述
给定一个由 `n` 个字符 `'('` 和/或 `')'` 组成的括号序列。你需要对其进行若干次操作。
每次操作中,你选择当前字符串的**最短**前缀(即字符串开头的若干个字符),该前缀是**好的**,然后将其从字符串中删除。
一个前缀被认为是**好的**,当且仅当满足以下两个条件之一:
- 该前缀是一个**常规括号序列**;
- 该前缀是一个长度**至少为 2** 的**回文串**。
括号序列称为**常规**的,如果可以通过向该序列中插入字符 `'+'` 和 `'1'` 来得到一个正确的算术表达式。例如,序列 `(())()`,`()` 和 `(()(()))` 是常规的,而 `)(`,`(()` 和 `(()))(` 不是常规的。
括号序列称为**回文**,如果它正着读和反着读相同。例如,括号序列 `))`,`((` 和 `)(()` 是回文,而括号序列 `()`,`)(` 和 `))(` 不是回文。
当无法找到**好的**前缀时,你停止操作。你的任务是求出在给定字符串上你将执行多少次操作,以及操作结束后剩余的字符数。
你需要回答 $t$ 个独立的测试用例。
输入格式
第一行包含一个整数 $t$($1 \le t \le 10^4$)—— 测试用例的数量。接下来 $2t$ 行描述每个测试用例。
每个测试用例的第一行包含一个整数 $n$($1 \le n \le 5 \cdot 10^5$)—— 括号序列的长度。
每个测试用例的第二行包含一个长度为 $n$ 的字符串,由字符 `'('` 和/或 `')'` 组成 —— 给定的括号序列。
保证所有测试用例的 $n$ 之和不超过 $5 \cdot 10^5$($\sum n \le 5 \cdot 10^5$)。
输出格式
对于每个测试用例,输出两个整数 $c$ 和 $r$ —— 你对给定括号序列执行的操作次数,以及执行完所有操作后字符串中剩余的字符数。