#CF2233C. 括号序列的代价
括号序列的代价
题目描述
定义任意括号字符串的代价为:该字符串中,是合法括号子序列的最长子序列的长度。
给你一个括号字符串 和整数 。你最多可以从字符串 中删除 个字符,要求让处理后字符串的代价尽可能小。
子序列定义:序列 是序列 的子序列,当且仅当可以通过从 中删除若干(可以为0或全部)任意位置的元素得到 。
合法括号序列定义:向该序列中插入
+和1可以得到合法算术表达式。例如(())()、()、(()(()))是合法的;) (、(()、(()))(不是合法的。
输入格式
本题包含多组测试用例。第一行输入测试用例数量 ()。
每组测试用例:
第一行两个整数 (),分别代表字符串 的长度和最多可删除字符数量。
第二行给出长度为 的字符串 ,仅由字符 ( 和 ) 构成。
附加约束:所有测试用例的 总和不超过 。
输出格式
对每组测试用例,输出一个长度为 的二进制字符串。
第 位为 1 代表原字符串对应位置字符被删除,0 代表保留。
串中 1 的数量不能超过 。删除标记对应的剩余字符串的代价要做到最小。
存在多解时输出任意一组合法答案。
10
2 1
)(
2 0
()
4 1
(())
4 1
())(
5 1
((())
6 2
()()()
6 2
(()())
6 2
())(()
7 3
(()((()
10 3
(()())())(
00
00
1000
1000
00010
101000
001001
100001
1100001
0101001000
说明
第一组测试用例,字符串本身代价已经是 ,因此不需要删除任何字符。
第三组测试用例,删除一个字符后无法把代价降到 ,但删除任意一个字符都可以得到代价为 的字符串。