字符串
字符串哈希,马拉车算法等
notmuch
这个作者很懒,什么都没留下…
展开
-
牛客NC13610 矩阵 - 二维(矩阵)哈希 + 二分
一维哈希可以将字符串映射为一个整数,而二维哈希则可以将矩阵映射为一个整数。令h[i][j]表示左上顶点为(1, 1),右下顶点为(i, j)的矩阵的哈希值,mat[i][j]表示原矩阵。采用如下的方式更新h[i][j]:for(int i = 1; i <= n; ++i) for(int j = 1; j <= m; ++j) h[i][j] = h[i][j - 1] * base1 + mat[i][j];for(int i = 1; i <=原创 2021-02-21 09:24:00 · 580 阅读 · 0 评论 -
HDU 3068 - 马拉车(manacher)算法模板题
马拉车(manacher)算法可以在O(n)时间内求出最长回文子串或回文子串的个数。马拉车一开始还是比较晦涩难懂的,这里推荐两篇文章,可以帮助了解马拉车算法的思想:漫画:如何找到字符串中的最长回文子串?一文让你彻底明白马拉车算法第一篇使用了漫画讲解,相对第二篇文章更容易理解马拉车算法的思想,但代码实现上不如第二篇简洁。故推荐先阅读第一篇,要实现代码时再参照第二篇。#include<algorithm>#include<cstdio>#include<i原创 2021-02-19 16:21:14 · 378 阅读 · 0 评论 -
Libre OJ 103 - 用进制哈希法替代KMP
KMP可以用于求一个模式串P在母串T中出现的次数和位置,时间复杂度是O(n + m) (n为P的长度,m为T的长度)。进制哈希法也可以做到在O(n + m)的时间内求出P在T中出现的次数和位置,而且做法非常简单暴力!还未了解进制哈希法的可以阅读下面两篇博客:进制哈希法进制哈希的性质#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>using原创 2021-02-18 17:29:56 · 191 阅读 · 1 评论 -
Libre OJ 2823 - 字符串哈希,进制哈希
使用进制哈希法解决这道题。还未了解进制哈希法的可以阅读这个博客:https://blog.csdn.net/shamansi99/article/details/113843802进制哈希有一个很方便的性质:假设我们选定base为基数,并采用自然溢出法。令h[i]表示子串s[1~i]的哈希值,p[i]表示base的i次方。那么,子串s[l~r]的哈希值可以通过下式求得:h[l~r] = h[r] - h[l - 1] * p[r - l + 1].原因不累述,自己推一下应该很快就原创 2021-02-18 16:54:36 · 197 阅读 · 0 评论 -
洛谷-P3370 【模板】字符串哈希
推荐两个关于字符串哈希的博客:字符串哈希入门字符串哈希进阶本题可以用进制哈希来解决,这应该也是字符串哈希中很常用的一种哈希方法。进制哈希的核心思想是将字符串转换为一个base进制的整数。首先确定一个base值,作为基;一个mod值,作为模数。再设置一个hash_val值,初始为0,它将记录字符串的最终的哈希值。然后迭代这个字符串,将base乘以hash_val再加上当前字符的整数值,将取余mod后将结果赋给hash_val,继续下一轮迭代。最终的hash_val即为该字符串的原创 2021-02-18 11:48:53 · 638 阅读 · 1 评论