******字符串处理******
hqwhqwhq
有梦想就不累
展开
-
字符串处理——Tire树__LA3942
其实Trie树并没有听上去那么高级。首先它是把所有的单词存到了一棵树里面,说白了,就是按照一个单词的前缀来存。不过这棵树不需要按照严格意义上的树来了,实际上,只需要用ch[u][i]来存就好了,而ch[u][i]代表的就是整棵树,ch[u][i]的值为树的节点值,即时遍历的时间戳。u代表的是当前节点值,ch[u][i]代表的是u的儿子节点中单词'i'代表的节点值,如果ch[u][i] = 0,原创 2015-06-11 23:57:36 · 564 阅读 · 0 评论 -
HDU 5371 Manacher+暴力
1:先用Manacher预处理出以a[i]为中心的所有最长回文串的长度。2:题目要求的子序列相当于两个回文串的叠加,暴力枚举第二个回文串的中心。(稍微加点优化,不然就t了)#include #include #include #include #include #include #include #define ll long long#define FOR(i,x,y)原创 2015-08-15 14:35:00 · 325 阅读 · 0 评论 -
HDU 5536 Chip Factory (2015长春J题&&Trie树)
比赛的时候这道题想了好久,最后还是没想到正解,一直提醒队友不要暴力,暴力一定不过,最后看那么多人都过了,我们还没想到正解,于是就暴力了,n3n^3过了。。。分析:把所有数2进制分解,建一颗Trie树,然后暴力n2n^2找出所有(i,j)(i,j)在Trie树里面招出xorxor最大值。因为要保证i,j,ki,j,k不相等,所以扫(i,j)(i,j)的时候,不妨先删除i,ji,j串,查询完了再插入。t原创 2015-11-04 23:48:12 · 657 阅读 · 0 评论 -
HDU 5442 2015长春站网络赛1006(后缀数组)
后缀数组大神模板 比赛的时候没有A掉的一题,总结起来还是自己想得过于简单了,实际上也确实是蛮简单的裸地后缀数组的题(好像正解不是后缀数组写的)。 做法是:正着再写一边,找一次sa[2n-1], 这个就是对应的顺时针最优解。把序列翻转以后再写一边,照一次sa[2n-1],算出所有height值,逆序再找一边height[i] < n的时候的最右端的i,这个就是逆时针最优的解。口头表达好像比较不容易原创 2015-09-15 23:57:15 · 413 阅读 · 0 评论 -
HDU 2222 Keywords Search (AC自动机)
AC自动机上学期看过,看是一直没有写过,今天把这道模板题写完了。 附上学习博客的地址:AC自动机 代码风格是模仿的bin神博客的。分析:理解了KMP以后AC自动机并不是很难理解。KMP是对于一个串找公共前后缀,而AC自动机是对于一颗Trie树找公共前后缀。要点:如果匹配失败了,那么要转到fail指针后面的进行匹配。 代码中预处理出所有的ch值,这样扫匹配串:ch[now][str[i]-‘a’原创 2015-11-06 18:24:23 · 756 阅读 · 0 评论 -
POJ 2752 后缀数组
这道题是一道很裸的KMP,原来是用KMP写的,今天换后缀数组写了一下,就这道题而言,KMP要比后缀数组快的多。 这次写完才发现为什么上次我用后缀数组写这题一直T,我原来自己写的后缀数组并没有写基数排序,复杂度是o(nlognlogn),简直作死。。。 直接上代码吧,比较水#include <cstdio>#include <cstring>#include <cstdlib>#in原创 2015-09-18 00:02:34 · 515 阅读 · 0 评论 -
HDU 2896 病毒侵袭(AC自动机)
分析:这也是一道很裸的AC自动机,单词结尾的节点不在是1,而是id,即这个单词的序号,然后用vector把所有序号存在来,一遍去重,然后输出答案就好了。总的复杂度为o(m*l)代码:#include <bits/stdc++.h>#define LL long long#define uLL long long#define FOR(i,x,y) for(int i = x;i < y;++原创 2015-11-07 00:03:23 · 449 阅读 · 0 评论 -
HDU 5510 Bazinga (2015沈阳站B题&&KMP)
分析:从后往前扫,维护rr(当前串是第rr个串的子串)。预处理,从后往前扫,每次比较相邻的两个串,前面的串是不是后面串的子串,如果不是那么rr向后面找到第一个是子串的位置。记录下当前串的位置。从当前串向前扫,如果当前串不是r的子串,那么r++r++,找到第一个是子串的位置,否则,l−−l--。复杂度:o(nl)o(nl)代码:#include <bits/stdc++.h>#define LL l原创 2015-11-08 12:46:47 · 705 阅读 · 0 评论 -
AC自动机
AC自动机简介Aho−Corasick automatonAho-Corasick\ automaton,该算法在19751975年产生于贝尔实验室,是著名的多模匹配算法。下面我们会举一个具体问题来讲解AC自动机。前提知识KMP算法+Trie原创 2017-11-27 21:13:12 · 367 阅读 · 0 评论