Module: hash


Problem

7 /8


contacto cultural

Theory Click to read/hide

Además de secuencias, también puede codificar conjuntos. Es decir, conjuntos de objetos sin orden en ellos. Se calcula según la siguiente fórmula:
hash(A) = \(\sum_{a \in A} p^{ord(a)}\)   <- contando todo módulo
donde ord es una función que asigna a un objeto del conjunto su número ordinal absoluto entre todos los objetos posibles (por ejemplo, si los objetos son números naturales, entonces ord(x) = x, y si son letras latinas minúsculas, entonces ord(& #39;a' ;) = 1, ord('b') = 2 etc.)

Es decir, para cada objeto asociamos un valor igual a la base de la potencia del número de este objeto y sumamos todos estos valores para obtener un hash de todo el conjunto. Como se desprende claramente de la fórmula, el hash se vuelve a calcular fácilmente si se agrega o elimina un elemento del conjunto (simplemente agregue o reste el valor requerido). Misma lógica,  si no se agregan o eliminan elementos individuales, sino otros conjuntos (solo agregue / reste su hash).

Como ya puede comprender, los elementos individuales se consideran conjuntos de tamaño 1, para los cuales podemos calcular el hash. Y los conjuntos más grandes son simplemente una unión de tales conjuntos individuales, donde al combinar conjuntos, agregamos sus valores hash.

De hecho, sigue siendo el mismo hash polinomial, pero antes del coeficiente en pm , teníamos el valor del elemento de secuencia bajo el número n - m - 1 (donde n es la longitud de la secuencia), y ahora este es el número de elementos en el conjunto cuyo número ordinal absoluto es igual a m.

En dicho hash, se debe tomar una base suficientemente grande (más grande que el tamaño máximo del conjunto) o usar hash doble para evitar situaciones en las que un conjunto de p objetos con un número ordinal absoluto m tenga el mismo hash que un conjunto con un objeto con valor absoluto. número ordinal m+1.
 

Problem

A principios del siglo XVIII, un grupo de exploradores europeos llegó a una isla habitada por un grupo de tribus que nunca habían entrado en contacto con representantes de la civilización europea.

Para establecer contactos con éxito con los nativos, el líder del grupo planea dar un regalo al líder de cada tribu que conoce. Para ello, trajo una larga cadena de vidrio, semejante a piedras preciosas. 
Representemos la cadena como una cadena s, compuesta por letras minúsculas del alfabeto inglés, donde cada letra significa el tipo de pieza de vidrio en la posición correspondiente. 
Los investigadores cortarán la cadena en algunos fragmentos y luego entregarán exactamente un fragmento al líder de cada tribu encontrada por el grupo. El líder de la investigación decidió dividir la cadena en fragmentos de acuerdo con las siguientes reglas:
  • Para no perder mucho tiempo cortando, cada fragmento debe ser un grupo de piezas de vidrio adyacentes en la cadena, es decir, una subcadena de la cadena s.
  • Se deben utilizar todas las piezas de vidrio, es decir, cada pieza de vidrio debe estar incluida en exactamente un fragmento.
  • Debido a que los investigadores no saben cómo los aborígenes valorarán ciertos tipos de vidrio, quieren que cada jefe obtenga el mismo juego de vidrio sin tener en cuenta el orden. Es decir, para cualquier tipo de vidrio, el número de vidrios de este tipo debe ser el mismo en cada uno de los fragmentos.
  • Los investigadores no saben cuántas tribus viven en la isla, por lo que la cantidad de fragmentos preparados debe ser la mayor posible.

Ayuda al administrador a determinar el número máximo de fragmentos que se pueden obtener.

Entrada:
La primera línea contiene la cadena s (1 <= |s| <= 5000000).

Salida:
Imprima un solo número: el número máximo posible de fragmentos en los que los investigadores pueden cortar la cadena que tienen sin violar ninguna de las condiciones formuladas por el líder del grupo.

Ejemplos:
 
Explicaciones:
En el primer ejemplo, los investigadores pueden romper la cadena 'abbabbbab' fragmentos 'abb', 'abb', 'bab', luego el líder de cada tribu que encuentren recibirá un vaso de tipo 'a' y dos piezas de 'b'.

En el segundo ejemplo, la cuerda no se puede dividir en más de un fragmento de la cadena, observando todas las condiciones.
Entrada Salida
abbabbbab 3
aabb 1