![](https://img-blog.csdnimg.cn/20190927151101105.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
kmp
小菜鸡加油
菜鸡
什么都能折磨
展开
-
F. 地图压缩(二维kmp+哈希)
https://codeforces.com/gym/103389/problem/F实际上比较能看出来是kmp吧。POJ2185是二维kmp的最小矩阵面积。询问次数多的话就不能每次取字符串遍历了。需要找到一个快速取字符串value的方式就是哈希。二维的公共前后缀怎么找呢?对每行每列进行哈希的预处理,对于查询的矩阵或者行的哈希值数组。对于列同理。然后找出行的哈希value的最大公共前后缀长度,即最多可以有多少行。对列同理找出哈希value的最大公共前后缀长度,即最多可以有多少列。行数和列数乘积就原创 2021-11-09 16:50:55 · 473 阅读 · 0 评论 -
P3426 [POI2005]SZA-Template(kmp+dp)
https://www.luogu.com.cn/problem/P3426这题出得挺好的,代码量简洁但是却有一定思维量。先说一下暴力做法,不难看出如果要完成这一工作,必然和前后缀有关,如果当前i的前后缀存在交叉,那么这一段一定可能成为答案。若不交叉,则需要知道前缀被组成的串数,由于前缀可以被组成,前缀=后缀,所以后缀也可以被组成。因此我们关心中间的这一段能否被组成。先说一下自己开始的错误dp想法。我开始是判前缀被组成的子串长度*2>=前缀即可转移。其实这个做法不能判断中间的一段是否能被组成。原创 2021-11-03 20:17:40 · 221 阅读 · 0 评论 -
manacher算法理解
前言:kmp是预处理最大前后缀的思路来跳转,马拉车利用了回文子串的半径来达到减少冗余。如何求解一串字符串中的最长回文子串。1.暴力O(n^3)枚举字符串再check2.暴力O(n^2)枚举对称中心,然后两个指针由此为中心拓展,更新答案,O(n^2)3.二分+哈希O(nlogn)由于一个回文串,知道了对称中心后,左边的串和右边的相同。因此其实存在单调性。S【i...j】为回文串,则S【i+1,j-1】为回文串。因此可以二分半径长度。而字符串的判定可以哈希来做。但是有时候原创 2021-08-23 19:17:49 · 110 阅读 · 0 评论 -
P3375 【模板】KMP字符串匹配
https://www.luogu.com.cn/problem/P3375思路:以前看着有一点迷糊。现在看看kmp的核心就是一个处理最大公共前后缀,匹配失败的时候直接优化。定义D[i]:0~i的一共i+1个字母的最大公共前后缀。处理的p和t匹配的时候直接用d就能优化,预处理出d[i]就是错开一位让p串和自身匹配,当然由于匹配到i位置,前i-1的D[0~i-1]都处理好了,所以这个匹配也是直接匹配失败跳转的。#include<iostream>#include<vector原创 2021-05-11 11:21:27 · 156 阅读 · 0 评论 -
D. MUH and Cube Walls
https://codeforces.com/problemset/problem/471/DPolar bears Menshykov and Uslada from the zoo of St. Petersburg and elephant Horace from the zoo of Kiev got hold of lots of wooden cubes somewhere. They started making cube towers by placing the cubes one o原创 2020-09-04 16:32:55 · 216 阅读 · 0 评论 -
kmp板子
来源:https://blog.csdn.net/v_july_v/article/details/7041827#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<cstdio>#include<algorithm>using namespace std;const int.原创 2020-07-27 15:50:10 · 142 阅读 · 0 评论