CF1189A Keanu Reeves
题目描述
在传奇电影《黑客帝国》三部曲中扮演 Neo 的 Keanu Reeves 开始怀疑自己:也许我们真的生活在虚拟现实中?为了验证这一点,他需要解决如下问题。
我们称仅由 $0$ 和 $1$ 组成的字符串为“好”的,当且仅当其中 $0$ 的个数和 $1$ 的个数不同。例如,1、101、0000 都是“好”的,而 01、1001 和 111000 不是“好”的。
给定一个长度为 $n$ 的仅由 $0$ 和 $1$ 组成的字符串 $s$。你需要将 $s$ 切分成尽可能少的子串 $s_1, s_2, \ldots, s_k$,使得每个子串都是“好”的。更正式地说,你需要找到一个“好”字符串序列 $s_1, s_2, \ldots, s_k$,使得它们的拼接等于 $s$,即 $s_1 + s_2 + \dots + s_k = s$,并且 $k$ 尽可能小。
例如,将 110010 切分为 110 和 010,或者切分为 11 和 0010 都是合法的,因为 110、010、11、0010 都是“好”的,并且无法将 110010 切分为更少的子串,因为 110010 本身不是“好”的。同时,将 110010 切分为 1100 和 10 不合法,因为这两个字符串都不是“好”的。又如,将 110010 切分为 1、1、0010 也不合法,因为这不是最小的切分方式,尽管这三个字符串都是“好”的。
你能帮助 Keanu 吗?可以证明总是存在解。如果有多种最优方案,输出任意一种即可。
输入格式
第一行包含一个整数 $n$($1 \le n \le 100$),表示字符串 $s$ 的长度。
第二行包含一个长度为 $n$ 的仅由 $0$ 和 $1$ 组成的字符串 $s$。
输出格式
第一行输出一个整数 $k$($1 \le k$),表示将 $s$ 切分成的最小子串数。
第二行输出 $k$ 个字符串 $s_1, s_2, \ldots, s_k$,用空格分隔。每个字符串长度均为正,拼接后等于 $s$,且每个字符串都是“好”的。
如果有多种答案,输出任意一种即可。
说明/提示
在第一个样例中,字符串 1 没有被切分。由于它本身是“好”的,条件满足。
在第二个样例中,1 和 0 都是“好”的,而 10 不是“好”的,因此答案确实是最小的。
在第三个样例中,100 和 011 都是“好”的,而 100011 不是“好”的,因此答案确实是最小的。
由 ChatGPT 4.1 翻译