hnu 10076 Jimmy's Riddles DFA
句子的语法匹配。这个用DFA确实可以很方便做出来,用递归判断之类的应该也可以。 感觉用dfa只需要保证状态转换图对了,基本上就不会出bug了,但是其它的方法去匹配这种类似正则表达式的字符串就容易出错多了。 百度百科的DFA定义如下: 英文全称:Deterministic Finite Automaton, 简写:DFA...
View Articlepoj 2778 DNA Sequence AC自动机+矩阵快速冥
题意很简单,假定文本集就是A,C,T,G,给定M个模式串,问你长度为N的文本不出现这些模式串的可能性到底有多少种。。。 确实非常不直观的样子。。。 解法是先学学AC自动机,建立起Trie图,根据trie图可以得到长度为1的路径矩阵,然后再快速冥得到长度为N的路径矩阵。...
View Articlehnu 2243 考研路茫茫——单词情结 AC自动机+矩阵冥累加和
这个题目更奇葩。据说是上一个题的加强版。 题意是给定M个模式串,然后给定长度L,问不超过L的文本至少含有一个模式的情况的总种数。 还是用模式串建立Trie图,根据Trie图建立起路径长度为1的矩阵M。 总情况数目为26^1+26^2+...+26^L。不含模式串的情况总数为矩阵N = M^1+M^2+M^3+...+M^L的第一行之和。总情况数目减去不含模式串的情况就是答案。...
View Articlepoj 1509 Glass Beads 字符串最小表示
赤裸裸的字符串最小表示题。所谓字符串最小表示指的是给定一个字符串,假设其可以循环移位,问循环左移多少位能够得到最小的字符串。 算法即是周源的最小表示法,搜索可以找到相关论文和ppt。 该算法其实也不是太复杂,思路可以这样理解。假设原字符串为s,设s1 = s + s; s2 = s1循环左移1位;现在处理s1和s2,实际写程序的时候可以通过下标偏移和取模得到s1和s2,而并不需要生成。...
View Articlepoj 1625 Censored! AC自动机 + DP + 大数加法
这个题与poj2778dna sequence解法基本一致。只是这个题的答案没有取模,而且文本串不太长。问题是不取模的话就只能输出实际的答案了,就只能用大数了。 而且用大数的话,再用矩阵冥可能就会超时之类的。 这类题还可以用除矩阵冥外的另外一种解法,就是直接dp即可。 二维状态,第一维代表文本串长度,第二维代表在AC自动机中的状态。...
View Articlepoj 3691 DNA repair AC自动机 + dp
题意是给定一系列模式串。然后给出一个文本串,问至少改变文本串里面多少个字符可以使文本串不包含任何一个模式串。...
View Articlepoj 1226 Substrings 后缀数组
求N个字符串最长的公共子串。这题数据比较水,暴力第一个字符串的子串也可以过。初学后缀数组,有很多不明白的东西,此题后缀数组的代码在网上也是一把抓。 说实话我确实还不懂后缀数组,但是后缀数组太强大了,只能硬着头皮照着葫芦画瓢了。贴下代码方便以后查阅吧。。。...
View Articlepoj 3294 Life Forms 后缀数组求至少出现在K个字符串中的最长公共子串
此题就是给出N个字符串,然后求一个最长的子串,它至少出现在N/2+1个字符串中,如果有多个这样的子串,按字典序输出,如果没有这样的子串,输出?。 此题是罗穗骞论文里面的例11,他有讲述具体的解法。要用后缀数组做这样的题真不容易,用后缀数组就感觉是一件非常纠结的事情了。...
View Articlehdu 3068 最长回文 Manacher算法
该题就是求一个字符串的最长回文子串,就是一个满足本身是回文的最长的子串。 该题貌似可以用后缀数组和扩展kmp做,但是好像后缀数组貌似会tle,改学了下一个专门的叫Manacher算法的东西。。。 这又是一个线性改良算法。找到有篇文章写的不错,链接如下:http://www.felix021.com/blog/read.php?2040。...
View Articlepoj 3264 Balanced Lineup St算法建立Rmq
ST算法可以说就是个二维的动态规划,黑书上有解释。 #include <stdio.h>#include <string.h>#include <algorithm>#include <math.h>using namespace std;const int MAX_I = 50010;const int MAX_J = 20;int...
View Article
More Pages to Explore .....