Editorial for Casos de Prueba
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Resolví este problema usando hashing. El hashing puede fallar en algunos casos y existen algunos trucos para disminuir la probabilidad de que esto pase. De todas formas, mi solución pasó los =P.
Siendo las cadenas de la entrada . Podemos construir la solución más pequeña permutando las cadenas y luego tratando de 'unirlas' una a la otra. Para dos cadenas
y
, necesitamos encontrar el segmento más largo que se solapa entre el final de la cadena
y el inicio de la cadena
. La fuerza bruta obvia no dará en tiempo. Sin embargo, podemos usar hashing para calcular el resultado en
, donde
es
. La función de hashing que usé es la polinomial
. Esto nos ofrece la oportunidad de calcular el valor de hash de cualquier subsequiencia de la cadena en tiempo
.
Entonces, podemos intentar todas las permutaciones de e intentar 'unir' las cadenas adyacentes eliminando los segmentos que se solapan entre estas utilizando la idea anterior explicada.
Existe un último caso: si es una substring de
para cualquier
, entonces simplemente podemos ignorar
. Podemos usar hashing para revisar si una cadena está contenida dentro de otra.
Comments