随笔分类 - 模式串匹配及kmp算法&&AC自动机
bzoj 3172 单词 ac自动机|后缀数组
摘要:题目大意:给定n个字符串连成了一篇文章,问每个字符串在这篇文章中出现的次数,可重复覆盖这里ac自动机和后缀数组都可以做当然后缀数组很容易就解决,但是相对时间消耗高这里就只讲ac自动机了将每个字符串放入ac自动机中,这里需要记录到达每个ac自动机上的节点出现这个状态有多少次而我们添加字符串进入的时候,...
阅读全文
HDU 3341 状态压缩DP+AC自动机
摘要:题目大意:调整基因的顺序,希望使得最后得到的基因包含有最多的匹配串基因,使得所能达到的智商最高这里很明显要用状态压缩当前AC自动机上点使用了基因的情况所能达到的最优状态我最开始对于状态的保存是,针对基因的个数转化为最小的二进制个数保存,但是浪费了很多二进制位,比如8 -> 1000,那么之后的100...
阅读全文
zoj 3228 覆盖及非覆盖串的多次匹配
摘要:题目题意:给定多个小串,在一个长串中寻找这些串的匹配次数,有些统计的是可覆盖的,有些统计的是非覆盖的先可以简单理解一下,建立ac自动机后,当前节点包含的字符串必然被把它作为fail指针的节点包含,所以一开始写了个set[MAX],然后MLE了如果一个当前串被完全访问了,那么这个串一定是在整个fail...
阅读全文
POJ 3691 AC自动机上的dp
摘要:题目大意:给定一些不合理的DNA序列,再给一段较长的dna序列,问最少修改几次可以使序列中不存在任何不合理序列,不能找到修改方法输出-1这里你修改某一个点的DNA可能会影响后面,我们不能单纯的找匹配数,因为你找到了你也不一定有方法改变它这里用DP来解决判断到第i位dna , 之前dp值保存了前面dn...
阅读全文
URAL 1158 AC自动机上的简单DP+大数
摘要:题目大意在一种语言中的字母表中有N(N 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 #define clr(x) memset(x ,...
阅读全文
HDU 2594 扩展kmp模板题
摘要:题目大意:给定两个字符串,在第一个字符串中找到一个最大前缀作为第二个字符串的后缀 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 1...
阅读全文
HDU 1358 简单kmp
摘要:题目大意:找到所有的可组成连续字符串相连的位置,和循环字符串的个数#include #include #include #include #include #include #include #include using namespace std;#define ll long long#defi...
阅读全文
HDU 3336 扩展kmp
摘要:题目大意:找到字符串中所有和前缀字符串相同的子串的个数对于这种前缀的问题,通常通过扩展kmp来解决其实吧这是我第一次做扩展kmp的题目,原来确实看过这个概念,今天突然做到,所以这个扩展kmp的模板是做到这道题直接copy的这里用扩展kmp很好解决问题,_next[i],表示第i位开始所能匹配到的最大...
阅读全文
CSU 1214 找最大异或值
摘要:题目大意:给定一堆数,从中找2个数异或得到的最大值直接暴力会超时,我们要考虑对于每一个数去匹配找到异或的最大值,我们希望2进制越前面的数尽可能都为1所以我们用 0-1 字典树保存这些数,因为一个int型的正整数最多2进制到第30位,所以我们用31层高的字典树保存,第一层为root节点每次查询操作都是...
阅读全文
POJ 2513 无向欧拉通路+字典树+并查集
摘要:题目大意:有一堆头尾均有颜色的木条,要让它们拼接在一起,拼接处颜色要保证相同,问是否能够实现这道题我一开始利用map来对颜色进行赋值,好进行后面的并查操作以及欧拉通路的判断,但是map效率太低,超时了网上看了一遍发现必须得用效率更高的字典树对每个不同的颜色进行赋值 1 #include 2 #in...
阅读全文
字典树模板题 POJ 2503
摘要:1 #include 2 #include 3 4 char en[11],fr[11]; 5 int st; 6 struct Tire{ 7 int next[26]; 8 char eng[11]; 9 }node[200005];10 void insert(char...
阅读全文
病毒的侵扰和再侵扰两道AC自动机的应用
摘要:HDU2896 病毒的侵扰http://vjudge.net/problem/viewProblem.action?id=16404题目大意:记录每个病毒的编号,并给出一些网站的源码,分别输出网站及其对应编号中所含病毒的编号,没有就不输出最后输出有病毒网站的个数这道题需要注意的是这个所有ASCII码...
阅读全文
HDU 2222 最简单的AC自动机套模板应用
摘要:HDU 2222 题意:给出N(N#include #include using namespace std;#define N 500005char str[1000005];struct AC{ int ch[N][26],fail[N],val[N],last[N],tmp,root; ...
阅读全文
HDU 1358 next数组的推移
摘要:题目大意:输入n,再输入一个长度为n的字符串,从第二位开始,计算它的前缀(包括他自己)中出现过的重复字符串的个数,如aabaabaabaab的第6位的前缀aabaab,aab连续出现了两次,所以输出位数i=6,k=2这个题目要利用next函数求解,不断往前推移,保证往前推移的量能被i整除。即del=...
阅读全文
HDU1686 计算模式串匹配的次数
摘要:题目大意:输入一个T,表示有T组测试数据;每组测试数据包括一个字符串W,T,T长度大于W小于1000000,w长度小于10000,计算W匹配到T中成功的次数;这题很明显要用KMP算法,不然很容易超时,但在使用kmp算法时也要注意,我第一次将匹配成功的位置得到后,循环进入kmp算法,从前一个匹配到的位...
阅读全文
HDU1711 最基础的kmp算法
摘要:Problem DescriptionGiven two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b[2], ...... , b[M] (1 2 #include 3 using namespace std; 4 ...
阅读全文
浙公网安备 33010602011771号