字符串算法
文章平均质量分 75
Masamiiiii
这个作者很懒,什么都没留下…
展开
-
hdu 2222 Keywords Search AC自动机模板题
点击打开链接题意:给出母串S 长度小于1e6 ,和字典, 问s中出现的dic单词有多少个?KMP是当字典中单词个数为1的情况 若单词个数很多 则复杂都O(n*m)显然不行 于是AC自动机就来啦~参考AC自动机=KMP+TrieAC自动机主要就3个部分: 1 把所有模板插入到Trie中,建立大的状态转移图 2 建立失败指针: 根结点的失败指针指向自己原创 2017-02-24 17:07:09 · 298 阅读 · 0 评论 -
hdu 2896 病毒侵袭 AC自动机入门题
点击打开链接题意:给出若干个模式串n建立字典时 把单词结尾设为编号,设p[i]为模式串是在某个母串中出现,对每个母串跑AC自动机即可 #include using namespace std;typedef long long ll;const int N=201*500; int flag;struct Aho{ int chd[N][128],v[N],f[N],las原创 2017-02-25 12:38:22 · 317 阅读 · 0 评论 -
hdu 3065 病毒持续侵袭中 AC自动机入门题
点击打开链接题意:给出母串s长度aho中记录模式串出现次数,用AC自动机进行匹配即可 ac自动机时间复杂度: 假设有N个模式串,平均长度为L;文章长度为M。 建立Trie树:O(N*L) 建立fail指针:O(N*L) 模式匹配:O(M*L) 所以,总时间复杂度为:O( (N+M)*L )。#include using namespace std;typede原创 2017-02-27 16:30:12 · 317 阅读 · 0 评论 -
Codeforces 271D Good Substrings 暴力+Trie
点击打开链接题意:string s长度枚举substring 开头 直到右端点R非法 map标记重复,O(n^2logn) TLE了在标记重复上进行优化,用Tri#include using namespace std;typedef long long ll;const int N=2e3+20;string s,a;int b[N],k;int ch[N*N][30原创 2017-04-28 15:41:40 · 438 阅读 · 0 评论 -
POJ 2185 Milking Grid 二维KMP
点击打开链接题意:R*C字符矩阵,R若为一维,则相当于用kmp求出最小循环节(只要求覆盖,len%(len-next[len])可以不为0)先对每行求最小循环节xi,子矩形的宽度最小为:xi(i=1~r)的最小公倍数lr.在对每列求最小循环节yi 子矩形的高度最小为:yi(i=1~c)的最小公倍数lc.以lr*lc子矩阵为单位显然能覆盖整个字符矩阵#include #原创 2017-05-30 03:43:40 · 428 阅读 · 0 评论 -
ARC 060F Best Representation KMP(循环节)
题意:定义一个字符串合法:当该字符串没有循环节存在,给出string s,令F=(f1,f2..fm) 满足fi为s的某一部分.f1,f2,..fm连起来为s.并且任意fi为合法|s|求最小m 利用next求出最小循环节,若f[i]=1 则m=len,若len%(len-f[len])!=0 则m=1其余有循环节情况,都可以按照前len-1个分一组,最后一个字符分一组 则m原创 2017-07-12 22:35:45 · 542 阅读 · 0 评论 -
Codeforces 514C Watto And Mechanism 哈希
题意:给出n个string,m次询问,判断string s是否和n个string中的某一个正好有一个位置不同.n,m总的字符串长度不超过1e5正好要有一个位置不同,因为不同字符在某个位置上只有两情况,把string插入到set中 暴力枚举位置后查询 O(|s|^2logn) set比较字符串要|s|...TLE..计算string的hash值,插入到set 枚举不同位置原创 2017-07-10 11:08:36 · 505 阅读 · 0 评论