CF1189A.Keanu Reeves

传统题 时间 2000 ms 内存 256 MiB 3 尝试 1 已通过 1 标签

Keanu Reeves

题目描述

在传奇电影《黑客帝国》三部曲中扮演 Neo 的 Keanu Reeves 开始怀疑自己:也许我们真的生活在虚拟现实中?为了验证这一点,他需要解决如下问题。

我们称仅由 0011 组成的字符串为“好”的,当且仅当其中 00 的个数和 11 的个数不同。例如,1、101、0000 都是“好”的,而 01、1001 和 111000 不是“好”的。

给定一个长度为 nn 的仅由 0011 组成的字符串 ss。你需要将 ss 切分成尽可能少的子串 s1,s2,,sks_1, s_2, \ldots, s_k,使得每个子串都是“好”的。更正式地说,你需要找到一个“好”字符串序列 s1,s2,,sks_1, s_2, \ldots, s_k,使得它们的拼接等于 ss,即 s1+s2++sk=ss_1 + s_2 + \dots + s_k = s,并且 kk 尽可能小。

例如,将 110010 切分为 110 和 010,或者切分为 11 和 0010 都是合法的,因为 110、010、11、0010 都是“好”的,并且无法将 110010 切分为更少的子串,因为 110010 本身不是“好”的。同时,将 110010 切分为 1100 和 10 不合法,因为这两个字符串都不是“好”的。又如,将 110010 切分为 1、1、0010 也不合法,因为这不是最小的切分方式,尽管这三个字符串都是“好”的。

你能帮助 Keanu 吗?可以证明总是存在解。如果有多种最优方案,输出任意一种即可。

输入格式

第一行包含一个整数 nn1n1001 \le n \le 100),表示字符串 ss 的长度。

第二行包含一个长度为 nn 的仅由 0011 组成的字符串 ss

输出格式

第一行输出一个整数 kk1k1 \le k),表示将 ss 切分成的最小子串数。

第二行输出 kk 个字符串 s1,s2,,sks_1, s_2, \ldots, s_k,用空格分隔。每个字符串长度均为正,拼接后等于 ss,且每个字符串都是“好”的。

如果有多种答案,输出任意一种即可。

说明/提示

在第一个样例中,字符串 1 没有被切分。由于它本身是“好”的,条件满足。

在第二个样例中,1 和 0 都是“好”的,而 10 不是“好”的,因此答案确实是最小的。

在第三个样例中,100 和 011 都是“好”的,而 100011 不是“好”的,因此答案确实是最小的。

由 ChatGPT 4.1 翻译

样例

1
1
1
1
2
10
2
1 0
6
100011
2
100 011

在线编程 IDE

建议全屏模式获得最佳体验