KMP
zxyoi_dreamer
退役了退役了爬了爬了,搞个锤子算法竞赛,不如好好享受大学生活。
展开
-
【校内模拟】小B的环(KMP)
简要题意:给一个字符环,长度为 nnn ,请你对 ∀k∈[0,n−1]\forall k \in [0,n-1]∀k∈[0,n−1],回答,能否删去一个长度为 kkk 的子串,使得剩下部分首尾相接之后,任何相邻的两个位置字符不同。n≤5e6n\leq 5e6n≤5e6题解:考虑剩什么而不是删什么。容易发现我们把存在相邻字符相同的位置拿出来,把这些位置之间的串拿出来,判断剩哪些子串合法即...原创 2020-02-08 15:07:19 · 344 阅读 · 0 评论 -
【校内模拟】耍望节(倍增)(KMP)
简要题意:给你一个残缺的串SSS,里面有一些空位,你需要填充里面的空位使得TTT是SSS的字串。多次询问字典序第kkk小的填充方案,输出哈希值。题解:倍增裸题。反正我这辈子都在考场上写不出字典序倍增考虑建立KMP自动机,状态[i][j][i][j][i][j]表示已经决定了前i−1i-1i−1个字符的填充,当前匹配到了第jjj个字符。选择siz最大的节点作为后继节点。预处理倍增后在...原创 2019-11-05 18:28:09 · 171 阅读 · 0 评论 -
【BZOJ4231】回忆树(AC自动机)(KMP)(DFS序)(树状数组)
传送门题解:一个串在从uuu到vvv的路径上匹配,我们直接分情况搞。首先,匹配没有横跨LCA,那么一定是LCA−>uLCA->uLCA−>u的路径上匹配反串,LCA−>vLCA->vLCA−>v匹配原串,直接用AC的fail树上DFS序离线上树状数组,一波就能搞了。然后是横跨了LCA的,直接把前后提一个∣S∣−1|S|-1∣S∣−1长度的串出来做匹配就...原创 2019-09-23 15:46:44 · 197 阅读 · 0 评论 -
【洛谷P3028】[USACO13MAR]项链Necklace(KMP)(DP)
传送门题解:建立KMP自动机。设f[i][j]f[i][j]f[i][j]表示考虑了第一个串的前iii个位置,匹配到jjj,且没有完全匹配过第二个串,前iii个位置中最多能够保留多少个,转移直接利用KMP自动机xjb写就行了。第一维顺便滚动数组优化一下。代码:#include<bits/stdc++.h>#define ll long long#define re r...原创 2019-09-20 21:31:31 · 144 阅读 · 0 评论 -
【POI2005】SZA-Template(KMP)
传送门题解:首先可以确定答案是这个串的一个border,一个border能覆盖全串的条件就是所有border包含这个位置的右端点之间的最大间距不能超过这个border的长度。可以建立nxt树来判断,但是实际上有更加简单的做法。设f[i]f[i]f[i]表示考虑了s[1⋯i]s[1\cdots i]s[1⋯i]这个串的答案,显然要么是iii要么是f[nxt[i]]f[nxt[i]]f[nx...原创 2019-09-20 18:26:13 · 183 阅读 · 0 评论 -
【BZOJ1461】字符串的匹配(KMP)(树状数组)
传送门题解:直接在匹配的时候记录一下当前考虑的位置的排名和个数,用树状数组支持修改和查询即可。失配的时候暴力删除。代码:#include<bits/stdc++.h>#define ll long long#define re register#define gc get_char#define cs constnamespace IO{ inline cha...原创 2019-09-17 17:52:48 · 249 阅读 · 0 评论 -
【HNOI2019】JOJO(KMP)(Border理论)
传送门题解:首先,由于没有强制在线,我们可以把操作离线下来在操作树上dfs搞一波。显然就是对字符串求一个kmp并算∑nxti\sum nxt_i∑nxti。考虑对于这个压缩了的串怎么处理。求nxt的时候,我们把二元组看作是一个特殊字符,求出这个意义下的nxt,因为之后再在后面加字符的时候也不会有重复,所以要连上必须是完全匹配的压缩串。然后再单独跑一遍,将这个新加的压缩段匹配到前面的若...原创 2019-09-02 23:40:15 · 805 阅读 · 0 评论 -
2019.03.27【SCOI2016】【洛谷P3290】【BZOJ4572】【LOJ2017】围棋(KMP)(轮廓线DP)
洛谷传送门BZOJ传送门LOJ传送门解析:由于空间存的下并没有用哈希表优化状态转移,不然还能快一点,主要是哈希表的存参后的解码会稍微麻烦一些。至少匹配一次,这个至少并不好处理,发现总的方案数始终是3nm3^{nm}3nm,所以我们考虑计算一次都没有匹配的方案数。对于上一行的状态,我们只关心它有没有匹配完第一行,直接用一个二进制数压一下就行了。在第一行匹配上的情况下如果当前行匹配上了...原创 2019-03-27 14:55:50 · 190 阅读 · 0 评论 -
【模板】字符串匹配KMP算法
参考题目:HDU2087解析:模板题解析联赛后更,这道题要求的匹配是互不重叠。如果要求允许重叠,只需要改一点点。代码:#include<bits/stdc++.h>using namespace std;#define re registerchar s[1003],t[1003];int nxt[1003];signed main(){ while(sca...原创 2018-10-08 20:02:17 · 95 阅读 · 0 评论