哈希
P4065:[l,r]是合法的区间当且仅当在该区间出现过的字符不在[0,l-1],[r+1,n-1]出现,只在[l,r]出现。统计合法区间个数。//考虑对于每种字符的每个位置赋一个随机值,使得该种字符的权值和为0。具体实现方法可以是加法、异或。这个题本质是对每种字符个数相关信息进行哈希。
P5270:空字符串动态末尾添加字符串,给定一个文本串,判定动态字符串的后缀是否合法。合法的定义是每种字符的个数都与文本串相同。//个数哈希法。每种字符赋一个随机值,不同的字符区分开。双端队列维护这个过程,当前字符串长度始终为文本串长度。单哈希就能过,但是题解给了六哈希。个人认为这题是一种无序字符串的哈希法。
trie
P4551:路径的长度是边权的异或。问最长路径。//容易发现两个点与根的路径异或起来就是这两个点的路径。所以就转成了序列上找两个数的最大异或值。字典树跑一下完事。
kmp
P4391:字符串的最小周期是len-nxt[len]。
P3435:kmp的fail树上跳一跳。可以写成记忆化。
P4824:kmp+栈。kmp匹配过程中可以记录对于每个i,s[i-j..i]匹配t[0..j]的最大的j。
P2375:kmp的fail树上维护一个根到当前节点的链的vector,在上面二分。不过有一个简单的线性做法,就是在kmp的基础上限制匹配长度不超过i/2。复杂度保证和kmp一样。
exkmp
AC自动机
P2414:离线后fail树的dfs序树状数组上打标记,构造AC自动机和询问的时候需要按照题意模拟的指针进行移动,该部分才是线性的复杂度,加上bit就是log。
exsam
cf204e:第i个串有多少个子串在至少k个串中出现过。//1.exsam的每个串暴力跳fail树并记忆化是根号的。证明网上搜。//2.一个子串在fail树的子树中都出现过,但是很难直接计算子树中和自己来源于同一个串的节点,因此反向思考,然后对于一个节点,把它到根路径上的点的子串数均累加上去即可。初衷是对于祖先考虑子树不好考虑,那就对于后代去考虑祖先。
hdu6405:经典的exsam根号暴力。打一打标记,再整个差分。
331

被折叠的 条评论
为什么被折叠?



