loj#P4147. 「CCO 2019」Bad Codes
「CCO 2019」Bad Codes
题目描述
译自 CCO 2019 Day2 T3「Bad Codes」。
你的朋友写了一个加密代码,想用它给你发送秘密信息。信息只由 个不同的符号组成,每个符号都对应一个由最多 个位组成的二进制序列。
不过,你担心这个代码可能出问题:同一个二进制序列可能对应着至少两个不同的信息。
比如,如果代码是这样:
$$\begin{aligned} A &\to 101 \\ B &\to 10 \\ C &\to 1 \\ D &\to 100 \end{aligned} $$那么二进制序列 既可以表示 ,也可以表示 。
你的任务是找出最短的二进制序列长度,该序列同时对应着至少两个不同的信息。如果没有这样的序列,那就输出 。
输入格式
第一行包含两个空格分隔的整数 和 。接下来 行,每行将包含一个最多 个位组成的二进制序列,表示一个符号。
输出格式
如果存在二进制序列对应至少两个信息,请输出最短序列的长度;否则,输出 。
4 3
101
10
1
100
3
这是题目描述中的例子。
4 4
1011
1000
1111
1001
-1
没有二进制序列对应多个信息。因为每个代码都是 位的,并且没有相同的代码,所以任何 位的编码都可以唯一解码成 个字符。
数据范围与提示
对于 的数据 ,;
对于另外 的数据,每个二进制序列都只包含一个 。
对于 的数据,。