#CF1997C. Even Positions
Even Positions
CF1997C Even Positions
题目描述
Monocarp 有一个长度为 的正规括号序列 ( 是偶数)。他甚至想出了自己计算其代价的方法。
他知道,在一个正规括号序列(RBS)中,每一个左括号都与对应的右括号配对。因此,他决定将 RBS 的代价定义为所有配对括号之间距离的总和。
例如,考虑 RBS (())()。它有三个括号对:
- (__)__:第 位和第 位括号之间的距离为 ;
- _()___:第 位和第 位括号之间的距离为 ;
- ____():第 位和第 位括号之间的距离为 。
所以 (())() 的代价为 。不幸的是,由于数据损坏,Monocarp 丢失了所有奇数位置上的字符 。只剩下偶数位置上的字符()。例如,(())() 变成了 _(_)_)。
Monocarp 想通过在奇数位置放置括号来恢复他的 RBS。但由于恢复后的 RBS 可能不唯一,他想选择代价最小的那一个。对于 Monocarp 来说这太难了,所以你能帮帮他吗?
提示:正规括号序列是只包含括号的字符串,使得该序列在插入 1-s 和 +-s 后,能构成一个合法的数学表达式。例如,()、(()) 或 (()())() 是 RBS,而 )、()( 或 ())(()) 不是。
输入格式
第一行包含一个整数 ()——表示测试用例的数量。接下来是 组测试数据。
每组测试数据的第一行包含一个整数 (, 为偶数)——字符串 的长度。
每组测试数据的第二行包含一个长度为 的字符串 ,所有奇数位置上的字符都是 '_',所有偶数位置上的字符都是 '(' 或 ')'。
附加约束:
- 至少可以恢复成一个正规括号序列;
- 所有测试用例中 的总和不超过 。
输出格式
对于每个测试用例,输出一个整数——将 中的 '_' 替换为括号后,能得到的正规括号序列的最小代价。
输入输出样例 #1
输入 #1
4
6
_(_)_)
2
_)
8
_)_)_)_)
8
_(_)_(_)
输出 #1
5
1
4
8
说明/提示
在第一个测试用例中,最优做法是将 变为 (())(),其代价为 。
在第二个测试用例中,唯一的选择是 (),代价为 。
在第三个测试用例中,唯一可能的 RBS 是 ()()()(),代价为 。
在第四个测试用例中,最优做法是将 变为 (())(()),代价为 。
由 ChatGPT 4.1 翻译