URAL 2118 Cipher Message 4
首先发现如果 \(01\) 都没有再串中出现过那么就是原本的串长,一个划分一段显然不劣。
否则,如果都出现就无解,有其中一个,考虑 \(0000...01\) 这样的结构,由于不存在前缀包含关系,所以也就不存在可以组成这种串的串,这样显然是最优的,同样,可以在后面接任意字符都是合法的。
但此时问题在于最后一段我们无法知道咋分配,那我们就求出一个最小的合法后缀,然后让前面都按照这样分即可。
注意到空间 64 MB,使用 AC 自动机匹配。
首先发现如果 \(01\) 都没有再串中出现过那么就是原本的串长,一个划分一段显然不劣。
否则,如果都出现就无解,有其中一个,考虑 \(0000...01\) 这样的结构,由于不存在前缀包含关系,所以也就不存在可以组成这种串的串,这样显然是最优的,同样,可以在后面接任意字符都是合法的。
但此时问题在于最后一段我们无法知道咋分配,那我们就求出一个最小的合法后缀,然后让前面都按照这样分即可。
注意到空间 64 MB,使用 AC 自动机匹配。