哈希

一维哈希
已知一个序列,记它的哈希值 $H(n)$ 为:$$H(n) \gets \sum_{i = 1}^{n} a_i \times b^{n - i}$$ 对于一段从 $l$ 到 $r$ 子序列,它的哈希值为:$$H(r) - H(l -1) \times b^{r -l + 1}$$
例题:
P3370
P2852
类比一位哈希,我们有:
二维哈希
已知一个矩阵,记它的哈希值 $H(x,y) $为:$$H(n,m) \gets \sum_{i = 1}^{n} \sum_{j=1}^{m} a_{i,j} \times b_1^{n - i} \times b_2^{m-j}$$
对于一段从 $(x_1,y_1)$ 到 $(x_2, y_2)$ 子矩阵,它的哈希值为:
$$H(x_2,y_2) - H(x_2,y_1-1) \times b_2^{y_2-y_1+1} -H(x_1-1, y_2) \times b_1^{x_2-x_1+1} +H(x_1-1,y_1-1) \times b_2^{y_2-y_1+1} \times b_1^{x_2-x_1+1}$$
例题:
UVA11019 Matrix Matcher
P2601 对称的正方形

注意事项

  1. 基数(进制数)数组记得 $c[0] = 1$
  2. $ull$ 自然溢出容易被卡,尽量写双模数哈希
posted @ 2023-10-03 18:22  Saka_Noa  阅读(19)  评论(0)    收藏  举报  来源