Module: Hash


Problem

7 /8


contato cultural

Theory Click to read/hide

Além das sequências, você também pode criar conjuntos de hash. Ou seja, conjuntos de objetos sem ordem neles. É calculado de acordo com a seguinte fórmula:
hash(A) = \(\sum_{a \in A} p^{ord(a)}\)   <- contando tudo modulo
onde ord é uma função que atribui a um objeto do conjunto seu número ordinal absoluto entre todos os objetos possíveis (por exemplo, se os objetos são números naturais, então ord(x) = x, e se letras latinas minúsculas, então ord(& #39;a' ;) = 1, ord('b') = 2 etc.)

Ou seja, para cada objeto associamos um valor igual à base à potência do número desse objeto e somamos todos esses valores de forma a obter um hash de todo o conjunto. Como fica claro na fórmula, o hash é facilmente recalculado se um elemento for adicionado ou removido do conjunto (basta adicionar ou subtrair o valor necessário). Mesma lógica,  se não forem adicionados ou removidos elementos únicos, mas outros conjuntos (basta adicionar/subtrair seu hash).

Como você já pode entender, os elementos individuais são considerados como conjuntos de tamanho 1, para os quais podemos calcular o hash. E conjuntos maiores são simplesmente uma união de tais conjuntos únicos, onde, combinando conjuntos, adicionamos seus hashes.

Na verdade, este ainda é o mesmo hash polinomial, mas antes do coeficiente em pm , tínhamos o valor do elemento de sequência sob o número n - m - 1 (onde n é o comprimento da sequência), e agora este é o número de elementos no conjunto cujo número ordinal absoluto é igual a m.

Em tal hash, deve-se tomar uma base suficientemente grande (maior que o tamanho máximo do conjunto) ou usar hashing duplo para evitar situações em que um conjunto de objetos p com número ordinal absoluto m tem o mesmo hash que um conjunto com um objeto com absoluto número ordinal m+1.
 

Problem

No início do século XVIII, um grupo de exploradores europeus chegou a uma ilha habitada por um grupo de tribos que nunca haviam tido contato com representantes da civilização européia.

Para estabelecer contatos com os nativos com sucesso, o líder do grupo planeja presentear o líder de cada tribo que encontrar. Para isso, trouxe uma longa corrente de vidro, semelhante a pedras preciosas. 
Vamos representar a string como uma string s, composta por letras minúsculas do alfabeto inglês, onde cada letra significa o tipo de vidro na posição correspondente. 
Os pesquisadores vão cortar a corrente em alguns fragmentos e, em seguida, entregar exatamente um fragmento ao líder de cada tribo encontrada pelo grupo. O líder da pesquisa decidiu dividir a cadeia em fragmentos de acordo com as seguintes regras:
  • Para não perder muito tempo cortando, cada fragmento deve ser um grupo de pedaços de vidro adjacentes na cadeia, ou seja, uma substring da string s.
  • Todos os pedaços de vidro devem ser usados, ou seja, cada pedaço de vidro deve ser incluído em exatamente um fragmento.
  • Como os pesquisadores não sabem como os aborígenes irão avaliar certos tipos de vidro, eles querem que cada chefe obtenha o mesmo conjunto de vidro, independentemente da ordem. Ou seja, para qualquer tipo de vidro, o número de vidros desse tipo deve ser o mesmo em cada um dos fragmentos.
  • Os pesquisadores não sabem quantas tribos vivem na ilha, então o número de fragmentos preparados deve ser o maior possível.

Ajude o gerente a determinar o número máximo de fragmentos que podem ser obtidos.

Entrada:
A primeira linha contém a string s (1 <= |s| <= 5000000).

Saída:
Imprima um único número - o número máximo possível de fragmentos em que os pesquisadores podem cortar a cadeia que possuem sem violar nenhuma das condições formuladas pelo líder do grupo.

Exemplos:
 
Entrada Saída
abbbabbab 3
aabb 1

Explicações:
No primeiro exemplo, os pesquisadores podem quebrar a cadeia 'abbabbbab' fragmentos 'abb', 'abb', 'bab', então o líder de cada tribo que encontrar receberá um copo do tipo 'a' e dois pedaços de 'b'.

No segundo exemplo, a string não pode ser dividida em mais de um fragmento da cadeia, respeitadas todas as condições.