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