#CF1997C. Even Positions

Even Positions

CF1997C Even Positions

题目描述

Monocarp 有一个长度为 nn 的正规括号序列 ssnn 是偶数)。他甚至想出了自己计算其代价的方法。

他知道,在一个正规括号序列(RBS)中,每一个左括号都与对应的右括号配对。因此,他决定将 RBS 的代价定义为所有配对括号之间距离的总和。

例如,考虑 RBS (())()。它有三个括号对:

  • (__)__:第 11 位和第 44 位括号之间的距离为 41=34 - 1 = 3
  • _()___:第 22 位和第 33 位括号之间的距离为 32=13 - 2 = 1
  • ____():第 55 位和第 66 位括号之间的距离为 65=16 - 5 = 1

所以 (())() 的代价为 3+1+1=53 + 1 + 1 = 5。不幸的是,由于数据损坏,Monocarp 丢失了所有奇数位置上的字符 s1,s3,,sn1s_1, s_3, \dots, s_{n-1}。只剩下偶数位置上的字符(s2,s4,,sns_2, s_4, \dots, s_n)。例如,(())() 变成了 _(_)_)。

Monocarp 想通过在奇数位置放置括号来恢复他的 RBS。但由于恢复后的 RBS 可能不唯一,他想选择代价最小的那一个。对于 Monocarp 来说这太难了,所以你能帮帮他吗?

提示:正规括号序列是只包含括号的字符串,使得该序列在插入 1-s 和 +-s 后,能构成一个合法的数学表达式。例如,()、(()) 或 (()())() 是 RBS,而 )、()( 或 ())(()) 不是。

输入格式

第一行包含一个整数 tt1t50001 \le t \le 5000)——表示测试用例的数量。接下来是 tt 组测试数据。

每组测试数据的第一行包含一个整数 nn2n21052 \le n \le 2 \cdot 10^5nn 为偶数)——字符串 ss 的长度。

每组测试数据的第二行包含一个长度为 nn 的字符串 ss,所有奇数位置上的字符都是 '_',所有偶数位置上的字符都是 '(' 或 ')'。

附加约束:

  • ss 至少可以恢复成一个正规括号序列;
  • 所有测试用例中 nn 的总和不超过 21052 \cdot 10^5

输出格式

对于每个测试用例,输出一个整数——将 ss 中的 '_' 替换为括号后,能得到的正规括号序列的最小代价。

输入输出样例 #1

输入 #1

4
6
_(_)_)
2
_)
8
_)_)_)_)
8
_(_)_(_)

输出 #1

5
1
4
8

说明/提示

在第一个测试用例中,最优做法是将 ss 变为 (())(),其代价为 3+1+1=53 + 1 + 1 = 5

在第二个测试用例中,唯一的选择是 (),代价为 11

在第三个测试用例中,唯一可能的 RBS 是 ()()()(),代价为 1+1+1+1=41 + 1 + 1 + 1 = 4

在第四个测试用例中,最优做法是将 ss 变为 (())(()),代价为 3+1+3+1=83 + 1 + 3 + 1 = 8

由 ChatGPT 4.1 翻译