Module: Hachage


Problem

7 /8


contacts culturels

Theory Click to read/hide

En plus des séquences, vous pouvez également hacher des ensembles. C'est-à-dire des ensembles d'objets sans ordre. Il est calculé selon la formule suivante :
hachage(A) = \(\sum_{a \in A} p^{ord(a)}\)   <- tout compter modulo
où ord est une fonction qui attribue à un objet de l'ensemble son nombre ordinal absolu parmi tous les objets possibles (par exemple, si les objets sont des nombres naturels, alors ord(x) = x, et si des lettres latines minuscules, alors ord(& #39;a' ;) = 1, ord('b') = 2 etc.)

C'est-à-dire que pour chaque objet on associe une valeur égale à la base à la puissance du nombre de cet objet et on additionne toutes ces valeurs afin d'obtenir un hachage de l'ensemble entier. Comme il ressort clairement de la formule, le hachage est facilement recalculé si un élément est ajouté ou supprimé de l'ensemble (il suffit d'ajouter ou de soustraire la valeur requise). Même logique,  si ce ne sont pas des éléments uniques qui sont ajoutés ou supprimés, mais d'autres ensembles (il suffit d'ajouter/soustraire leur hachage).

Comme vous pouvez déjà le comprendre, les éléments simples sont considérés comme des ensembles de taille 1, pour lesquels nous pouvons calculer le hachage. Et les ensembles plus grands ne sont qu'une union de ces ensembles uniques, où en combinant des ensembles, nous ajoutons leurs hachages.

En fait, c'est toujours le même hachage polynomial, mais avant le coefficient à pm  nous avions la valeur de l'élément de séquence sous le numéro n - m - 1 (où n est la longueur de la séquence), et maintenant c'est le nombre d'éléments dans l'ensemble dont le nombre ordinal absolu est égal à m.

Dans un tel hachage, il faut prendre une base suffisamment grande (supérieure à la taille maximale de l'ensemble), ou utiliser un double hachage pour éviter les situations où un ensemble de p objets de nombre ordinal absolu m a le même hachage qu'un ensemble à un objet avec un nombre ordinal absolu m+1.
 

Problem

Au début du XVIIIe siècle, un groupe d'explorateurs européens arriva sur une île habitée par un groupe de tribus qui n'avaient jamais été en contact avec des représentants de la civilisation européenne.

Pour réussir à nouer des contacts avec les indigènes, le chef du groupe prévoit d'offrir un cadeau au chef de chaque tribu qu'il rencontre. À cette fin, il a apporté une longue chaîne de verre, semblable à des pierres précieuses. 
Représentons la chaîne comme une chaîne s, composée de petites lettres de l'alphabet anglais, où chaque lettre signifie le type de morceau de verre à la position correspondante. 
Les chercheurs vont couper la chaîne en quelques fragments, puis remettre exactement un fragment au chef de chaque tribu rencontrée par le groupe. Le responsable de la recherche a décidé de scinder la chaîne en fragments selon les règles suivantes :
  • Afin de ne pas passer beaucoup de temps à couper, chaque fragment doit être un groupe de morceaux de verre adjacents dans la chaîne, c'est-à-dire une sous-chaîne de la chaîne s.
  • Tous les morceaux de verre doivent être utilisés, c'est-à-dire que chaque morceau de verre doit être inclus dans exactement un fragment.
  • Parce que les chercheurs ne savent pas comment les aborigènes évalueront certains types de verre, ils veulent que chaque chef obtienne le même ensemble de verre sans tenir compte de l'ordre. Autrement dit, pour tout type de verre, le nombre de verre de ce type doit être le même dans chacun des fragments.
  • Les chercheurs ne savent pas combien de tribus vivent sur l'île, donc le nombre de fragments préparés doit être aussi grand que possible.

Aidez le responsable à déterminer le nombre maximum de fragments pouvant être obtenus.

Saisie :
La première ligne contient la chaîne s (1 <= |s| <= 5000000).

Sortie :
Imprimez un seul numéro - le nombre maximum possible de fragments dans lesquels les chercheurs peuvent couper la chaîne qu'ils ont sans violer aucune des conditions formulées par le chef de groupe.

Exemples :
 
Entrée Sortie
abbabbab 3
aabb 1

Explications :
Dans le premier exemple, les chercheurs peuvent briser la chaîne "abbabbbab" fragments "abb", "abb", "bab", puis le chef de chaque tribu rencontré recevra un verre de type "a" et deux morceaux de "b".

Dans le deuxième exemple, la chaîne ne peut pas être divisée en plus d'un fragment de la chaîne, en respectant toutes les conditions.