字符串hash
文章平均质量分 56
字符串---hash
(xsj)
模拟只会猜题意
贪心只能过样例
DP一般看规律
数论只会gcd
计算几何瞎暴力
图论只会匈牙利
数据结构没学过
字符串只能干输入
展开
-
算法进阶指南---0x18(二分+hash)匹配统计
原题链接题解此题可以用KMP写,也可以用hash写(简单),我们先用hash写我们先预处理出A和B的hash,然后枚举A的后缀字串所能匹配的B的最大长度,统计长度即可对于A的每个后缀字串,我们可以用二分来求所能匹配的最大长度代码#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#i原创 2021-03-02 16:40:14 · 141 阅读 · 0 评论 -
算法竞赛进阶指南---0x18(二维字符串hash)Matrix
题面题解1.对于此题,我们可以用二维字符串哈希来做,我们可以在nm的矩阵中枚举出所有ab矩阵的hash值,然后对于q次询问,只需要判断给出的a*b矩阵的hash值是否在枚举的集合中即可2. 类比一维hash,我们推出二维hash,如图所示3.如何枚举n*m的矩阵中枚举出所有a * b矩阵的hash值 ,我们可以从左到右枚举列,固定为b列,然后开始枚举,如图所以(假设是5 * 6的矩阵,枚举3 * 3的矩阵)蓝-红-绿-紫。对于大矩阵,我们提前预处理出每一行的hash值(一维has原创 2021-02-24 00:02:46 · 445 阅读 · 2 评论 -
算法竞赛进阶指南---0x14(Hash)Palindrome
题面题解题意就是让求一个字符串中最长的回文字串,可以用 Manacher 模板题 ,也可用字符串hash来做,这里主要讲字符串hash做法对于一个回文串 以中点为分界线,两边的串是相同的,那么我们就可以用hash值来判断两边的串是否相同 ,例如 abcdcba ,我们可以正着算一遍hash,逆着算一遍hash,然后枚举每一个点,二分以这个点为分界点的长度,比较其hash是否相同回文串分奇偶,对于奇数的有中点,对于偶数的没有,为了方便,我们可以使回文串都变为奇数,只需要在每个字母原创 2021-02-18 22:11:08 · 133 阅读 · 0 评论 -
算法竞赛进阶指南---0x14(Hash)兔子与兔子
题面题解就是字符串hash模板题,将字符串预处理出hash值,然后每次询问判断区间hash值是否相等即可字符串hash讲解点这里代码#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>using namespace std;typedef unsigned long long ULL;const原创 2021-02-17 22:21:02 · 125 阅读 · 1 评论 -
算法竞赛进阶指南---0x14(Hash)后缀数组
题面题解我们先来看朴素做法,对于一个长度为n的字符串,它的后缀也有n个,将他们排序(用快排)是 O(nlogn) ,如果是暴力比较两个字符串的字典序是 O(n) ,那么总的时间复杂度就是O(n2logn) ,显然不符合题中要求,那么如何做到题中所说的O(nlog2n) 呢?按题中思路来我们的后缀数组用字符串下标表示 sa[i] 就表示下标 i到n的字符 例如sa[1]表示"ponoiiipoi" sa[10]表示"i"这样我们虽然在快排的时候无法优化,但是可以在比较两个字符串的时候可以原创 2021-02-15 20:32:52 · 205 阅读 · 0 评论 -
acwing 841 字符串哈希
题面输入样例8 3aabbaabb1 3 5 71 3 6 81 2 1 2输出样例YesNoYes题解我们将一个字符串看成是一个2进制的数,然后预处理出字符串的前缀哈希(这里的哈希值是以前缀为末尾字母为最低位,就比如前缀abc是以c为最低为就是1 * 22 + 2 * 21 + 3 * 20 ),由于哈希值可能较大,我们在实际情况下还会模一个数然后计算区间中两个字符串区间是否相等 :我们就可以用前缀和公式 h[r] - h[l-1] ,但是我们前面预处理出的是以原创 2021-02-11 10:29:41 · 2305 阅读 · 3 评论