字符处理
geng4512
蛤蛤蛤蛤
展开
-
Ural1960 Palindromes and Super Abilities
嗯,这道题是回文树的裸题。 简单讲一下回文树。 也可以看看这个回文树笔记(转自quack_quack)struct PAM { int a[MAXN][MAXC], l[MAXN], fa[MAXN], sz, last; /*a就是next数组,一个节点的next[C]节点非空,表示着存在一个回文串在当前节点表示的回文串两边加上各一个字符C。 l表示长度len,在初始化原创 2016-01-18 21:19:44 · 616 阅读 · 0 评论 -
最长回文子串的查找
刚刚学习了manacher算法,感觉还是很优秀的,思路也很简单。具体介绍可以去http://www.felix021.com/blog/read.php?2040看。时间复杂度为O(n)O(n) 然后后缀数组的做法,在罗穗骞大神的论文里也写得很清楚了,即把原串反着放回到前一个的后面(中间用一个特殊符号分割)(同样的,用特殊符号处理成长度为奇数的串)。然后再依次询问suffix(i) 与 suffi原创 2015-12-19 14:34:51 · 640 阅读 · 0 评论 -
HDU 2222 Keywords Search(AC自动机)
传送门 AC自动机入门好题。作为模板的检测题吧。 AC自动机构造方法: 插入模式串,建成Trie,如果对于某个点x的next[c]不存在的话,就把next[c]指向fail[x]的next[c] 在Trie上加入失配边,就成功啦。 查找的时候一直按着next信息走到下一个节点。 代码:#include<stdio.h>#include<cstring>#define MAXN 100原创 2015-12-21 22:52:35 · 445 阅读 · 0 评论 -
HDU2896 病毒侵袭(AC自动机)
传送门 这一题实际上就是多模式,多文本的匹配,对于这道题来说,用AC自动机就可以解决,题解同前一道题。 代码:#include<stdio.h>#include<cstring>#include<algorithm>#include<vector>using namespace std;#define MAXN 10005#define MAXC 128#define MAXM 5原创 2015-12-21 23:00:22 · 394 阅读 · 0 评论 -
HDU3065 病毒侵袭持续中(AC自动机或后缀数组)
传送门 思路:将所有特征码建成一个AC自动机,然后查找就行了,找的时候直接找完也不会超时,因为模式串太短了(不超过50个字符),再长一点可以考虑树DP。 如果用后缀数组的话,我觉得可以O(NlogM)O(NlogM)(N为串的总长度,M为模式串最长长度)来Build。然后在Height数组里二分答案O(TlogM)O(TlogM)(T为模式串个数,一次lower_bound,一次upper_bo原创 2015-12-23 20:20:13 · 505 阅读 · 0 评论 -
回文树笔记(转自quack_quack)
1.回文树的next[charset]指针: b->aba 那么就这样表示:b.next[a]=aba 当然树里面肯定不能存字符串,于是就直接用下标标号代替了 2.回文树的fail指针: 跟ac自动机类似,fail指针指向当前节点的最大回文后缀 没有就指向根 3.回文树的根 有2个根,一个单根就是往下连回文串长度为奇数的节点,本身长度为-1 还有个双根就是往下连回转载 2015-12-24 22:44:51 · 1187 阅读 · 0 评论 -
BZOJ3172 TJOI2013 单词
传送门Description某人读论文,一篇论文是由许多单词组成。但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次。Input第一个一个整数N,表示有多少个单词,接下来N行每行一个单词。每个单词由小写字母组成,N<=200,单词长度不超过10^6Output输出N个整数,第i行的数字表示第i个单词在文章中出现了多少次。Sample Input3 a aa aaaS原创 2016-02-14 20:08:25 · 742 阅读 · 0 评论 -
BZOJ3439 KPM的MC密码
传送门 题意:给出n个字符串,对于每一个字符串,输出以他为后缀的串中编号第k小串的编号. 不是很懂为什么网上这道题都是什么主席树,这题明明可以O(N)O(N)来实现啊.只需要Hash一下就好了. 对于每一个串的每一个后缀都存一下这个后缀的所在串的编号,因为所有的串的后缀的个数是字符串的总长的,所以,我们只要用Hash表,就能在现行时间内完成整个题目啦!#include <cstdio>#in原创 2016-05-18 21:42:12 · 708 阅读 · 0 评论 -
BZOJ4556: [Tjoi2016&Heoi2016]字符串
这道题说难也不难,但是有一个很经典的维护主席树的思想。首先我们先建出一个后缀数组,然后我们按照sa的顺序建一棵以原串下表为权值的主席树,查询(a,b,c,d)(a, b, c, d)的时候,先二分一个长度,找出sa中串[c,c+len][c, c+len]的区间,然后查询区间中是否有下标属于[a,b−len+1][a, b-len+1]。 代码:#include <cstdio>#include原创 2016-07-06 23:31:21 · 1081 阅读 · 0 评论