字符串
nymph_h
这个作者很懒,什么都没留下…
展开
-
【字符串·Trie】uva3942 Remember the words
遇到多校第五场,1002,于是开始学trie树和AC自动机; 模板用的挑程,Trie树用一个二维数组ch[节点数目][字符种类数]实现; ch[I][j]表示第i个节点伸向j字符,如果存在j在i之后存在,则ch[I][j]>0;首先一道模板题uva1401 用d[I]表示 后缀I-L的分解方案数 d[I] = sum{d[I+len(x)]} len(x) 是合法单词且是I-L的前缀; 以上原创 2017-08-13 12:44:10 · 295 阅读 · 0 评论 -
【字符串·ac自动机】uva1449Dominating Patterns
ac自动机的基本用途是实现多个模板串在一个文本串中的匹配 如:a acd bbca aca 在 aacdacacabbcac中分别出现了几次?在trie树上计算一些新的东西; 失配数组f[maxn]: 如果在文本串I点失配,那还能去哪个节点碰碰运气 后缀链接last[maxn]: 节点j沿着失配链接往回走,遇到的下一个单词节点编号;题目uva4670,找出出现次数最多的字符串,用不同的数表示不原创 2017-08-13 13:04:48 · 194 阅读 · 0 评论 -
【字符串·AC自动机】hdu2222 Keywords Search
很温柔的一道题; 建树的时候,用val数组记录每个节点是几个单词的末尾节点,print函数将末尾是几个节点加上; 比如 input: 1 2 abc abc abc output: 2input: 1 1 abc abcabc output: 1#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cs原创 2017-08-13 13:15:41 · 151 阅读 · 0 评论 -
【AC自动机+矩阵快速幂】poj2778 DNA Sequence
渐渐开始变难orz 先老老实实建树; 然后建ac自动机,注意两个: 1. 若ch[I][j] ==0 ,某个节点没有某一字符的儿子,考虑将其指向其失配节点的儿子:ch[I][j] = ch[f[I]][j];Tire数就变成Tire图了。若val[f[I]]==1,某节点失配节点是危险节点,则将此节点标为危险节点。然后构造矩阵mp,如果a,b节点相连且b不是危险节点,mp[a][b]++;原创 2017-08-13 13:38:00 · 216 阅读 · 0 评论 -
【ac自动机·DP】poj3691 DNA Repair
这道题做得相当怀疑人生 先按照poj2778建树建图; http://blog.csdn.net/nymph_h/article/details/77141849 接下来不用矩阵快速幂用DP 我对DP从来有莫名的恐惧dp[文本串长度][Trie树节点数]; 母串的前I个前缀在TRIE树中遍历,达到某个安全节点j需要修改的最小值dp[I][j];#define _CRT_SECURE_NO_原创 2017-08-13 14:20:44 · 228 阅读 · 0 评论 -
【KMP+暴力】Bazinga hdu5510
好好的KMP,怎么就WA了13次呢?你说。你说清楚。 瞎给字符串排序浪费半小时… 纯暴力KMP先超时若干次… 打了鸡血改用ac自动机超空间若干次… 终于,终于想到 I 较大字符串 对 I 较小的字符串的包含关系。 KMP模板串文本串写反若干次…题意:求编号i最大的字符串,使得存在编号小于I的字符串不是他的字串。 题解:直接暴力O(n^2)次KMP,总共O(n^3)会超时;考虑如果串i包含原创 2017-10-18 23:16:25 · 170 阅读 · 0 评论 -
【字符串哈希】URAL1989 Subpalindromes
题意:给定一个字符串,(小于1e5), 有两种操作. 1. 将字符串某一位改成另一个字符。 2. 判断l,r区间内的字符串是不是回文串。思路:因为字符串不停在变化,即使不变,求出每个子段是否回文也要n方。所以将这个字符串看作正反两个26进制的数,如果某一段是回文的,那他在正反两段中的哈希值应该相等。用树状数组区间求和。另外,由于正反串在源串中位置不同,要乘上到串末端距离,消除误差。哈希...原创 2018-05-27 22:09:11 · 201 阅读 · 0 评论