
字符串算法
cjk_cjk
这个作者很懒,什么都没留下…
展开
-
[NOI2011]阿狸的打字机(AC自动机+树状数组)
【题解】KMP算法:每次询问时求出x串的失配函数,然后在y串上匹配,总复杂度O(m*len) 可以得40分 如果把所有单词建成一棵字母树,考虑类似的暴力:对每次询问,枚举y串的每个点(将这个点理解为x在y串上的最后一个匹配点),若从它沿失配指针到root的路径经过x串的最后一个点,则答案加1由于(x1,y),(x2,y),…这些y相同的询问在AC自动机上走的路径一样,可以对于y原创 2015-03-16 00:57:03 · 1208 阅读 · 0 评论 -
BZOJ1014 [JSOI2008]火星人prefix(Splay+字符串Hash)
【题解】动态的LCP问题 用 Splay 处理动态区间:插入操作"I x d"的实现:首先将x旋转至树根,则d应插在x的右字树中找到 x的右子树的最左端结点(即原来的s[x+1]在树中的对应结点),将d添加为它的左孩子 用 字符串Hash 判断字符串是否相等:o->H表示由o及其左右子树所对应字母构成的字符串的Hash值,则 o->H = o->ch原创 2015-06-22 21:03:57 · 988 阅读 · 1 评论 -
BZOJ3172 [Tjoi2013]单词(AC自动机+打标记)
刚开始把题意理解错了囧题意:给定n个字符串,求每个字符串在其他字符串中出现的次数之和 【题解】首先肯定要建立AC自动机 暴力算法:以每个词为文本串做匹配,每匹配上一个位置,就从该节点延fail或last数组上溯,给经过的的词尾结点加上1次出现次数 优化:由上述算法可知,每个文本串(即每个单词)在AC自动机上的每个结点,都可以使 其延fail数组能走到的单原创 2015-06-23 22:29:45 · 716 阅读 · 0 评论 -
BZOJ1030 [JSOI2007]文本生成器(AC自动机+dp)
【题解】与poj2778有类似之处,只不过本题模板串太长,无法用到矩阵,而文本较短,适于dpans = 26^m - 不含任意单词的文本数 不含任意单词的文本数 的求法:转化成从有向图的一点出发,走n步到达另一结点的方案数 本题为 从字典树的root出发,走m步到达任一结点,且不构成单词 的方案数,需使建立的所有有向边合法(无法走出单词)将单词建成AC自动机,每原创 2015-06-24 18:09:24 · 1117 阅读 · 0 评论 -
poj2778 DNA Sequence(AC自动机+矩阵快速幂 )
大神附图的题解:http://blog.youkuaiyun.com/morgan_xww/article/details/7834801【题解】将所有病毒串建立成字典树,并标记词尾结点,以下称"非法结点"那么,我们希望改造一下这棵树,即删掉一些结点,构造一些有向边,使得一个n位字符串相当于从改造图的根走n步,且中途不会形成非法串 对于树上的某个结点u,先允许它走到非法结点,将所有有向边都原创 2015-06-24 12:44:53 · 512 阅读 · 0 评论 -
[NOI2014]动物园(kmp+递推)
【题解】这里首先定义失配指针f[i]满足:第i个位置的字符与第f[i]位相同,字符数组从1开始 如:aba f[1]=0,f[2]=0,f[3]=1 要求出num[i],只需延f指针上溯,找到所有长度不超过i/2的位置,它的数目即为num[i]可以考虑fail树的思想,用cnt[i]记录从i延失配指针上溯,能遇到的结点数目 找出最大的长度不超过i/2的位置j,则num[i]=c原创 2015-07-13 22:59:02 · 1666 阅读 · 0 评论