字符串:AC自动机
文章平均质量分 71
skajre
这个作者很懒,什么都没留下…
展开
-
最纯粹的trie图题目
给N个模式串,每个不超过个字符,再给M个句子,句子长度<100判断每个句子里是否包含模式串N 字符都是小写字母5 8abcdedeftcakeabfabcdkefabkefbcdbraaddabqabf //// main.cpp// Richard//// Created by 邵金杰 on 16/7/26.//原创 2016-07-26 20:57:05 · 193 阅读 · 0 评论 -
UVA 1019 Matrix Matcher(AC自动机)
没想到这题有重复的行= =。#include#include#include#include#includeusing namespace std;const int maxnode=10000+5;int n,m,x,y;int tr;char T[1005][1005],P[105][105];int repr[105],Next[105];int cnt[1005][1原创 2016-10-27 08:52:27 · 229 阅读 · 0 评论 -
UVA 11468 Substring(AC自动机+树上的动态规划)
这题pro数组开小了,一直TLE。就是简单的记忆化搜索,走不是单词节点的点就可以,记得标出危险节点。#include#include#include#include#includeusing namespace std;const int maxnode=500;int idx[256];int k,n,L;struct DFA{ int ch[maxnode][64原创 2016-10-26 10:31:03 · 267 阅读 · 0 评论 -
UVA 1449 Dominating Patterns(AC自动机)
p数组少开了一个,查了一小时。#include#include#include#include#includeusing namespace std;const int maxnode=11000;struct AC{ int ch[maxnode][26]; int val[maxnode]; int last[maxnode]; int f[max原创 2016-10-25 18:17:29 · 151 阅读 · 0 评论 -
HDU 5880 Family View(AC自动机)
#include#include#include#includeusing namespace std;const int maxn=1000000+100;char p[maxn];int nxt[maxn][26],l[maxn],badnode[maxn],pre[maxn],vis[maxn];int L,root;int newnode(){ for(int i原创 2016-09-20 23:55:57 · 201 阅读 · 0 评论 -
POJ 1625 Censored(AC自动机+dp)
状态ans[i][j]表示长度为i的字符串能达到j状态(非危险结点)的数量。那么状态方程为ans[i+1][next]=ans[i+1][next]+ans[i][j],因为从i长度的串过度到i+1长度的串需要转到j的下一状态,并且该长度该状态有很多不同的串可以达到,所以要相加。那么最后只要把ans[n][j]状态加起来就可以了。//// main.cpp// Richard//原创 2016-09-06 09:59:12 · 215 阅读 · 0 评论 -
POJ 2778 DNA Sequence(AC自动机+矩阵加速)
感觉这道题目动态规划也可以做。不过矩阵更好,ans[i][j]代表从i到j走一步有多少种走法,n次幂代表从i到j走n步有多少种走法。最后把ans[0][i]全部加起来就行。但是ans是去掉危险结点的矩阵,如果一个结点的前驱结点是危险结点,那么它也是危险结点,因为走到他必然代表有子串被配对了。//// main.cpp// Richard//// Created by原创 2016-09-06 14:49:34 · 254 阅读 · 0 评论 -
POJ 3691 DNA repair(AC自动机+dp)
这道题实质上是指母串的DFA上跑一遍,不经过危险结点,要想完整跑下来最少需要修改几个字符。有一个细节就是孩子结点为空时可以建立虚拟结点,那样就可以直接访问下面的结点了,不用前驱结点每次都去寻找。状态方程是ans[i][j.son]=min{ans[i][j.son],ans[i-1][j]+str[i-1]!=k};//// main.cpp// Richard//// Cr原创 2016-09-05 15:58:57 · 240 阅读 · 0 评论 -
POJ 4052 Hrinity(AC自动机)
每次优化的时候标记尽量不一样,那样可以分的清楚一点。//// main.cpp// Richard//// Created by 邵金杰 on 16/9/4.// Copyright © 2016年 邵金杰. All rights reserved.//#include#include#include#include#includeusing namespac原创 2016-09-04 10:47:41 · 336 阅读 · 0 评论 -
POJ 3987 Computer Virus on Plant Pandora(AC自动机)
这题关键还是时间问题HDU上时间卡的是2000ms,POJ卡1000ms,所以最终要的是优化。优化主要在查找,一开始写的是用危险结点来判断要不要走,这样的话只要是危险结点都要走,就算这个点之前走过,也不会停下来。后来用count来判断,如果count为-1,那就不用走了,因为以前肯定走过了,而且路径是一样的,所以节省了大量时间。//// main.cpp// Richard////原创 2016-09-03 14:17:13 · 476 阅读 · 0 评论 -
POJ 1204 Word Puzzles(AC自动机)
每次找到了一个串的头,就要回去找他的前驱结点因为有可能模式串为abcd bcd如果不找前驱结点bcd的开始位置永远找不到。//// main.cpp// Richard//// Created by 邵金杰 on 16/9/2.// Copyright © 2016年 邵金杰. All rights reserved.//#include#include#inc原创 2016-09-02 21:41:11 · 394 阅读 · 0 评论 -
UVA 1078 Password Suspects(AC自动机+dp)
状态方程d[u][len][st],代表最后一个节点是u,长度为len,已经有st个串所能构成的密码数,记忆化搜索就行了。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>typedef long lo...原创 2016-11-09 21:55:35 · 1404 阅读 · 1 评论