QOJ.ac

QOJ

Time Limit: 2.0 s Memory Limit: 512 MB Total points: 100 Hackable ✓

#20082. Collision de hachage

Statistics

Récemment, Colin a appris le fonctionnement de l'algorithme de hachage de chaînes. De manière générale, il sert à convertir une chaîne en un entier.

Une méthode efficace et largement utilisée pour définir le hachage d'une chaîne $s$ de longueur $n$ (indexée à partir de 1) est :

$$hash(s) = \left( s[1] + s[2] \cdot p + s[3] \cdot p^2 + \ldots + s[n] \cdot p^{n-1} \right) \bmod m = \left( \sum_{i=0}^{n-1} s[i + 1] \cdot p^i \right) \bmod m$$

où $p$ et $m$ sont des nombres positifs choisis. On appelle cela une fonction de hachage polynomial roulant.

Mais Colin ne comprend pas comment choisir des $p$ et $m$ appropriés, de sorte qu'il rencontre souvent des problèmes de collision de hachage. Considérons deux sous-chaînes $s_1, s_2$ de la chaîne $s$ telles que $s_1 \neq s_2$ mais $hash(s_1) = hash(s_2)$ ; nous disons alors qu'il y a une collision de hachage entre $s_1$ et $s_2$.

Étant donnés une chaîne $s$ de longueur $n$, ainsi que deux entiers $p$ et $m$ choisis par Colin, il souhaite savoir de combien de manières il est possible de choisir les entiers $l_1, r_1, l_2, r_2$ satisfaisant $1 \le l_1 \le r_1 \le n, 1 \le l_2 \le r_2 \le n$, de telle sorte qu'il y ait une collision de hachage entre $s[l_1, r_1]$ et $s[l_2, r_2]$.

Entrée

La première ligne contient trois entiers $n, p, m$ ($1 \le n \le 3000, 1 \le p, m \le 2 \times 10^9$).

La deuxième ligne contient $n$ entiers $s[1], s[2], \ldots, s[n]$ ($0 \le s[i] \le 2 \times 10^9$), où le $i$-ième entier représente la valeur du $i$-ième caractère de la chaîne $s$.

Sortie

Un unique entier représentant la réponse.

Exemples

Exemples

Entrée 1

4 2 6
1 2 1 2

Sortie 1

4

Exemples

Entrée 2

4 2 5
1 2 1 2

Sortie 2

10

Remarque

Pour le premier exemple, les résultats de hachage de chaque sous-chaîne sont :

$hash(s[1, 1]) = 1, hash(s[2, 2]) = 2$

$hash(s[3, 3]) = 1, hash(s[4, 4]) = 2$

$hash(s[1, 2]) = (1 + 2 \cdot 2) \bmod 6 = 5$

$hash(s[2, 3]) = (2 + 1 \cdot 2) \bmod 6 = 4$

$hash(s[3, 4]) = (1 + 2 \cdot 2) \bmod 6 = 5$

$hash(s[1, 3]) = (1 + 2 \cdot 2 + 1 \cdot 2^2) \bmod 6 = 3$

$hash(s[2, 4]) = (2 + 1 \cdot 2 + 2 \cdot 2^2) \bmod 6 = 0$

$hash(s[1, 4]) = (1 + 2 \cdot 2 + 1 \cdot 2^2 + 2 \cdot 2^3) \bmod 6 = 1$

Les façons de choisir les paramètres dans la réponse sont :

  • $l_1 = 1, r_1 = 1, l_2 = 1, r_2 = 4$
  • $l_1 = 3, r_1 = 3, l_2 = 1, r_2 = 4$
  • $l_1 = 1, r_1 = 4, l_2 = 1, r_2 = 1$
  • $l_1 = 1, r_1 = 4, l_2 = 3, r_2 = 3$

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.