CF1305B Kuroni and Simple Strings

题目描述

现在 Kuroni 已经 10 岁了,他已经是个大孩子了,不再喜欢整数数组作为礼物。今年他想要一个括号序列作为生日礼物。更具体地说,他想要一个如此复杂的括号序列,以至于无论他怎么尝试,都无法移除一个简单的子序列! 我们称由 $n$ 个字符 '(' 或 ')' 组成的字符串为简单的,如果它的长度 $n$ 是正的偶数,且它的前 $\frac{n}{2}$ 个字符都是 '(',后 $\frac{n}{2}$ 个字符都是 ')'。例如,字符串 () 和 (()) 是简单的,而 )( 和 ()() 不是简单的。 Kuroni 会得到一个由 '(' 和 ')' 组成的字符串(该字符串不一定是简单的)。每次操作可以选择该字符串的一个子序列,使其构成一个简单字符串,并将该子序列的所有字符从字符串中移除。注意,这个子序列不需要连续。例如,他可以对字符串 ')()(()))' 选择加粗的子序列 '(())',删除这些字符后得到 '))()'。 Kuroni 需要对字符串进行尽可能少的操作,使得剩下的字符串无法再进行任何操作。最终剩下的字符串可以不是空串。 由于给定的字符串太长,Kuroni 无法自己找出最小操作次数。你能帮他完成这个任务吗? 如果序列 $a$ 是字符串 $b$ 的子序列,则 $a$ 可以通过删除 $b$ 中的若干(可能为零或全部)字符得到。

输入格式

输入仅一行,包含一个由 '(' 和 ')' 组成的字符串 $s$($1 \le |s| \le 1000$),其中 $|s|$ 表示 $s$ 的长度。

输出格式

第一行输出一个整数 $k$,表示你需要进行的最小操作次数。接下来输出 $2k$ 行,描述每次操作,格式如下: 对于每次操作,先输出一行一个整数 $m$,表示你要移除的子序列的字符数。 然后输出一行 $m$ 个递增的整数 $1 \le a_1 < a_2 < \dots < a_m$,表示你要移除的字符在当前字符串中的下标。所选子序列必须构成一个简单字符串。 如果存在多个满足条件的最优方案,你可以输出其中任意一个。

说明/提示

在第一个样例中,字符串为 '(()(('. 所描述的操作对应于删除加粗的子序列。剩下的字符串为 '(((', 无法再进行操作。另一个可行的答案是选择下标 $2$ 和 $3$,结果相同。 在第二个样例中,已经无法进行任何操作。 由 ChatGPT 4.1 翻译