SP26182 JC15D - Perfect Superstring
题目描述
**完美超串**
Satria 是个聪明人,他在理解二进制系统后,立即提出了一个新挑战!挑战是:给他一个二进制字符串 $S$,他会找出一个不是 $S$ 的子串的最短二进制字符串 $B$。但人的智力总有极限,Satria 若检查的 $S$ 的子串长度超过 $N$,他的脑力就会疲惫。因此,如果二进制字符串 $S$ 包含了所有可能的长度为 $N$ 的二进制字符串 $B$,他就无法再找出这样的 $B$。
Gunawan 知道了这个挑战以及 Satria 的智力极限,决定制作一个完美的长度为 $N$ 的超串。他将所有可能的二进制字符串 $B$ 写下来并连接在一起。例如,若他想制作长度为 2 的完美超串,他将 {0, 1, 00, 01, 10, 11} 拼接成 0100011011。然而,由于 Satria 的智力极限很高,Gunawan 的方法在高阶中效率低下,但他坚持要按照这个方法完成任务。
在 Gunawan 写下了 $K$ 位二进制字符串后,Tjandra 对他的认真态度感到好奇,问道:
Tjandra:"你在做什么?"
Gunawan:"我在解决 Satria 的挑战。"
Tjandra:"听起来有趣,你能解释一下吗?"
(Gunawan 解释了挑战的内容)
Tjandra:"哇,太有趣了。你是怎么解决这个问题的?"
(Gunawan 解释了他的方法)
Tjandra:"那效率太低了。事实上,只需要连接长度为 $N$ 的所有可能的二进制字符串就行了,长度小于 $N$ 的子串最终都会被包括在内。例如,如果要制作长度为 2 的完美超串,字符串 0100011011 太长了,其实只需要连接 {00, 01, 10, 11} 得到 00011011 就够了,依然是长度为 2 的完美超串。"
Gunawan:"哇,这确实更短!以前没想到过,这是最短的吗?"
Tjandra:"不,还有更短的。例如,在 000110011 中,子串 11 出现两次,可以删掉一个 '1',仍然满足长度为 2 的完美超串。"
Gunawan:"没错,我不想浪费精力。我希望能得到最短长度的完美超串。"
Tjandra:"很遗憾,目前没有简便的方法来生成这样一个最短的完美超串,但我知道有人可以用现代计算机来帮你实现。"
(Tjandra 从口袋里掏出他的旧手机,准备联系你求助)
Gunawan:"等一下,我已经写下了 $K$ 位,我不想从头开始删掉它们。"
Tjandra:"好吧 -\_- 我会考虑这一点的。"
于是,Tjandra 用他的旧手机打电话向你求助,因为他知道你精于处理字符串。你能帮他们实现吗?
输入格式
第一行输入一个整数 $N$,表示 Satria 挑战中的完美超串的阶数。
第二行输入两个整数 $K$ 和一个字符串 $X$,$K$ 表示 Gunawan 已经写下的二进制字符串的长度,$X$ 是该二进制字符串本身。
输出格式
第一行输出一个最短的以 $X$ 开头的长度为 $N$ 的完美超串,记为长度 $L$。
第二行输出一个长度为 $L$ 的二进制字符串,其是满足条件的完美超串。
说明/提示
- $1 \leq N \leq 10$
- $0 \leq K \leq 10^5$
- 字符串 $X$ 的长度为 $K$,即 $|X| = K$。当 $K=0$ 时,$X$ 可以是空串。
**样例 1**
输入
```
1
1 0
```
输出
```
2
01
```
**样例 2**
输入
```
1
1 1
```
输出
```
2
10
```
**样例 3**
输入
```
2
2 01
```
输出
```
5
01100
```
**样例 4**
输入
```
3
3 110
```
输出
```
10
1101000111
```
**样例 5**
输入
```
3
3 110
```
输出
```
10
1100010111
```
**样例 4(及 5)解释**
在样例 4 中,字符串 1101000111 以 110 开头:\[110\]1000111,因此 Gunawan 不需要将他之前写的数字删掉。
它满足长度为 3 的完美超串,因为它包含所有可能的长度为 3 的二进制字符串:
0: 1101000111
1: **1**101000111
00: 1101**00**0111
01: 11**01**000111
10: 1**10**1000111
11: **11**01000111
000: 1101**000**111
001: 11010**001**11
010: 11**010**00111
011: 110100**011**1
100: 110**100**0111
101: 1**101**000111
110: **110**1000111
111: 1101000**111**
注意,同样长度的字符串可能不止一种解法,如样例 5 中的 1100010111,也是另一个满足条件的最短完美超串。
**本翻译由 AI 自动生成**