![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
KMP
文章平均质量分 61
stargazer.
夜を穿つの
展开
-
【Codeforces 917 E】Upside Down(Ac自动机 / 后缀数组 / 哈希 / border相关 / Kmp / Exgcd)
传送门至今写过最长的字符串题看起来和回忆树差不多但不能直接kmpkmpkmp了分成u→lca,lca→vu\rightarrow lca,lca\rightarrow vu→lca,lca→v和穿过lcalcalca分别考虑前面直接照搬回忆树的做法考虑穿过lcalcalca的求出u→lcau\rightarrow lcau→lca中最长的后缀满足是SSS的前缀的长度以及lca→vlca\rightarrow vlca→v最长前缀满足为SSS后缀的长度得到了可以直接利用borderborde原创 2020-05-20 20:18:20 · 642 阅读 · 0 评论 -
【BZOJ #4231】—回忆树(Kmp+Ac自动机)
传送门考虑把经过LcaLcaLca提出来暴力KmpKmpKmp统计总长度只有O(∣S∣)O(|S|)O(∣S∣)的现在只用考虑一段链差分后就是到根的一条链考虑从根dfsdfsdfs,dfsdfsdfs的同时在AcAcAc自动机上走,把每个点点权加一对于每个询问就是failfailfail树子树和走出去的的时候减一对正反串分别建一个AcAcAc自动机就可以了#include<...原创 2019-09-25 17:15:59 · 316 阅读 · 0 评论 -
【洛谷P3082】【USACO13MAR】—项链Necklace(Kmp+DP)
传送门f[i][j]f[i][j]f[i][j]表示走到第一个的iii,第二个的jjj的最少删去用AcAcAc自动机的nxtnxtnxt转移一下就可以了#include<bits/stdc++.h>using namespace std;const int RLEN=1<<20|1;inline char gc(){ static char ibuf[R...原创 2019-09-25 16:35:34 · 204 阅读 · 0 评论 -
【洛谷P3426】【POI2005】—SZA-Template(Kmp+链表)
传送门一个显然的想法是建出后缀自动机只需要从nnn开始往上走,每次插入新的endposendposendpos用线段树维护一下最长全0串由于只用考虑从nnn开始可以先全部插入然后从上到下,每次把剩下子树的删去这样写个链表就可以了然后发现这个用failfailfail树也可以做了然后写个KmpKmpKmp就可以了#include<bits/stdc++.h>usin...原创 2019-09-25 13:25:46 · 158 阅读 · 0 评论 -
【BZOJ4974】【Lydsy1708月赛】—字符串大师(Kmp)
传送门很多题解每次暴力跳failfailfail的复杂度确定是对的吗?如果不是数据水应该随便卡到O(n2)O(n^2)O(n2)吧由于最小循环节=i−nxt[i]最小循环节=i-nxt[i]最小循环节=i−nxt[i]于是可以得到nxtnxtnxt如果已经得到了a[1...i−1]a[1...i-1]a[1...i−1]如果nxt[i]≠0nxt[i]\not =0nxt[i]=...原创 2019-09-24 14:50:41 · 125 阅读 · 0 评论 -
【BZOJ3620】—似乎在梦中见过的样子(Kmp)
传送门由于据说n2n^2n2可以过暴力枚举每个为开头,就和动物园这道题一样了#include<bits/stdc++.h>using namespace std;const int RLEN=1<<20|1;inline char gc(){ static char ibuf[RLEN],*ib,*ob; (ob==ib)&&(o...原创 2019-09-23 22:02:48 · 340 阅读 · 0 评论 -
【洛谷P2375】【NOI2014】—动物园(Kmp)
传送门考虑对于iii就有一个为i−nxt[i]i-nxt[i]i−nxt[i]的循环节那么s[1...n]s[1...n]s[1...n]和s[i...n]s[i...n]s[i...n]更短的一个相同前缀就是到nxt[nxt[i]]nxt[nxt[i]]nxt[nxt[i]]每次暴力跳到满足p∗2<=ip*2<=ip∗2<=i即可#include<bits/st...原创 2019-09-23 22:00:32 · 269 阅读 · 0 评论 -
【BZOJ4462】【JSOI2013】—编程作业(KMP)
传送门考虑小写字母置换不好匹配,但是同一种字母是有相同的置换考虑如果把小写字母的值变成和前一个相同字母的距离就可以正常的匹配了KmpKmpKmp即可注意特判第一个字符的情况#include<bits/stdc++.h>using namespace std;#define gc getcharinline int read(){ char ch=gc(); in...原创 2019-07-15 17:52:19 · 254 阅读 · 0 评论 -
【BZOJ2061】—Country(Kmp+记忆化搜索)
传送门考虑匹配的过程就相当于KmpKmpKmp,不过比较特殊遇到大写字母就递归匹配处理出f[i][j]f[i][j]f[i][j]表示串iii从匹配串第jjj为开始匹配的匹配个数pos[i][j]pos[i][j]pos[i][j]则表示把iii串匹配完时kmpkmpkmp指针所在位置代码也比较好写#include<bits/stdc++.h>using namespa...原创 2019-07-14 22:20:04 · 264 阅读 · 0 评论