
KMP及ExKMP
O(n+m)求lcp!!!
SSL_wj
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ybtoj【字符串算法】3章4题【子串拆分】
子串拆分题目解析先看数据范围……卡常O(n2)O(n^2)O(n2)还是考虑使用KMP(常数小的线性做法),考虑枚举左端点,设A=Sl,∣S∣A=S_{l,|S|}A=Sl,∣S∣,对AAA跑KMP,求出nxtnxtnxt数组,然后再跑一次KMP,额外在尝试匹配后不断跳长度过大的失配,最后判断即可code:#include<iostream>#include<cstring>#define rr register intusing namespace std;原创 2021-06-13 09:08:28 · 128 阅读 · 0 评论 -
P3435&&ybtoj【字符串算法】3章3题【OKR-Periods of Words】
OKR-Periods of Words题目P3435解析线性做法,不妨考虑KMPDC3是什么鬼东西求出nxtnxtnxt后,因为nxtnxtnxt是最大公共前后缀的长度,所以i−nxtii-nxt_ii−nxti就是一个周期(因为显然有s1,nxti=si−nxti+1,ns_{1,nxt_i}=s_{i-nxt_i+1,n}s1,nxti=si−nxti+1,n)于是直接沿nxtnxtnxt记忆化路径压缩递归即可code:#include<cstdio>#inc原创 2021-06-13 08:50:35 · 89 阅读 · 0 评论 -
ybtoj【字符串算法】3章2题【重复子串】
重复子串题目解析看一眼数据,就猜得到只能用线性做法考虑线性做法,用KMP求出nxtnxtnxt数组,此时显然有s1,nxtn=sn−nxtn,ns_{1,nxt_n}=s_{n-nxt_n,n}s1,nxtn=sn−nxtn,n,那么只需要考虑nnn模(n−nxtn)(n-nxt_n)(n−nxtn)是不是0就可以判断有没有了,而nn−nxtn\frac{n}{n-nxt_n}n−nxtnn就是有时的答案code:#include<cstdio>#include&原创 2021-06-13 08:38:07 · 160 阅读 · 0 评论 -
P3375&&ybtoj【字符串算法】3章1题【【模板】KMP字符串匹配】
【模板】KMP字符串匹配题目P3375ybtoj只需要输出出现次数解析KMP算法的名字是来源于三位发明者*Knuth(D.E.Knuth)&Morris(J.H.Morris)&Pratt(V.R.Pratt)*的名字,其特点是线性考虑设nxtinxt_inxti为s1,is_{1,i}s1,i的最大公共前后缀(即题意中的border)显然有nxt1=0nxt_1=0nxt1=0考虑nxtnxtnxt递推,发现可以成为nxtinxt_inxti的备用解只有nxti−原创 2021-06-12 20:23:06 · 100 阅读 · 0 评论