QOJ.ac

QOJ

時間限制: 2.0 s 記憶體限制: 512 MB 總分: 100 可 Hack ✓

#20082. Colisión de hashing

统计

Recientemente, Colin aprendió cómo funciona el algoritmo de hash de cadenas. En términos generales, se utiliza para convertir una cadena en un entero.

Una forma buena y ampliamente utilizada de definir el hash de una cadena $s$ de longitud $n$ (indexada desde 1) es

$$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$$

donde $p$ y $m$ son números positivos elegidos. Esta se denomina función de hash rodante polinomial.

Pero Colin no entiende cómo elegir valores apropiados para $p$ y $m$, por lo que a menudo se encuentra con problemas de colisión de hash. Considere dos subcadenas $s_1, s_2$ de la cadena $s$ tales que $s_1 \neq s_2$ pero se cumple $hash(s_1) = hash(s_2)$; entonces decimos que hay una colisión de hash entre $s_1$ y $s_2$.

Ahora, dada una cadena $s$ de longitud $n$, y dos enteros $p$ y $m$ elegidos por Colin. Él quiere saber cuántas formas hay de elegir enteros $l_1, r_1, l_2, r_2$ que satisfagan $1 \le l_1 \le r_1 \le n, 1 \le l_2 \le r_2 \le n$, y que exista una colisión de hash entre $s[l_1, r_1]$ y $s[l_2, r_2]$.

Entrada

La primera línea contiene tres enteros $n, p, m$ ($1 \le n \le 3000, 1 \le p, m \le 2 \times 10^9$).

La segunda línea contiene $n$ enteros $s[1], s[2], \ldots, s[n]$ ($0 \le s[i] \le 2 \times 10^9$), donde el $i$-ésimo entero representa el valor del $i$-ésimo carácter de la cadena $s$.

Salida

Un solo entero que representa la respuesta.

Ejemplos

Entrada 1

4 2 6
1 2 1 2

Salida 1

4

Ejemplos

Entrada 2

4 2 5
1 2 1 2

Salida 2

10

Nota

Para el primer ejemplo, los resultados del hash de cada subcadena:

$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$

Las formas de seleccionar los parámetros en la respuesta:

  • $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.