
字符串
文章平均质量分 77
dumeichen
这个作者很懒,什么都没留下…
展开
-
poj 3461 KMP(模式匹配模板)
题意:经典模式匹配问题。思路:KMP(Knuth-Morris-Pratt)算法。采用的算法导论里的伪代码模板。#include #include char s[10005],t[1000005];int T,next[10005],lens,lent;void getnext(){ int i,k; next[0] = k = -1; for(i = 1;原创 2015-04-26 10:04:54 · 437 阅读 · 0 评论 -
poj 1226 暴力字符串匹配
题意:给定n个串,求一个最大子串长度,使得它或者它的逆向串在每个串中出现。思路:先找个最短的串,然后枚举这个串的字串,并求出求逆串,然后在给定的n个串中暴搜即可。用库函数strstr即可。#include #include #include #include using namespace std;#define clr(s,t) memset(s,t,sizeof(s));#原创 2015-10-29 23:44:42 · 336 阅读 · 0 评论 -
poj 2845 字符串(二进制数相加)
题意:给定两个二进制数,把他们相加。题目不难,但是还是要仔细。思路:字符串模拟。注意两组数据即可:1、00000+000000=02、000001+00001=10#include #include #include using namespace std;#define clr(s,t) memset(s,t,sizeof(s));#define N 1005int原创 2015-11-10 23:29:42 · 432 阅读 · 0 评论 -
poj 3087 字符串+set(洗牌)
题意:给定长度都为C两个字符串,S1,S2,和一个要求的结果字符串SS。先把S2的最下面一张牌放在最下面,然后S1,S2交错的叠放,得到S(洗牌操作)。如果此时得到SS,则输出次数。否则再把S最下面的C个字符当做S1,把剩下的当做S2,再次重复上面的过程。如果不能得到目标字符串,则输出-1。思路:模拟。一开始只以为回到初始串则输出-1,实际上有可能会的变换过程中的任意一个串,那么循环原创 2015-11-05 08:55:56 · 414 阅读 · 0 评论 -
poj 2138 字符串dp
题意:给定一个起始单词,该单词长度为3,再给定一个字典。求从起始单词开始,每步在单词上添加一个字母并且仍然出现在字典中,这样能够达到的最长的那个单词(解保证这样的单词唯一)思路:先将词典按照单词的长度排序。思路就是对于每个单词s,扫描比它长度小1的并且可以由初始单词到达的那些单词t,如果发现s可以由t添加一个字符组成,那么s能够由初始字符到达。判断s是否能够由t构成一开始用的lcs,后来发原创 2015-09-25 17:33:39 · 354 阅读 · 0 评论 -
poj 1141 dp(补成最短的规范字符串)
题意:给定一个由'(' , ')' , '[' , ']'四个字符组成的字符串s,求一个最短的合乎括号规范的字符串t,使得s是t的子序列。合乎规范的串的定义是:1. 空串。 2. 若S合乎规范, 那么(S) 和[S] 都合乎规范。3. 如果A 和 B 都合乎规范,那么AB 合乎规范。Sample Input([(]Sample Output()[()]思路:采用动态规划原创 2015-08-17 17:41:52 · 392 阅读 · 0 评论 -
poj 4052 AC自动机
题意:给定2500个模式串,和长度为5,100,000的母串,问母串中包含多少个模式串。如果模式串s1是模式串s2的子串,而且s2被母串包含,则s1应被忽略。思路:首先比较常规,对模式串建立AC自动机。然后用母串S在trie图上遍历,如果:1、走到未被忽略的终止节点x,则将x标记为已经匹配,并且忽略掉所有目前匹配串的所有子串。 2、走到危险但非终止的节点y, 则沿着y的前缀指针链找到第原创 2015-08-03 16:21:39 · 681 阅读 · 0 评论 -
poj 3691 AC自动机+dp(修复DNA使其不带病毒)
题意:给定不超过50个由 ‘A’, ‘G’ , ‘C‘ ,’T’。 四个字母组成的模式串,每个模式串长度不超过 20,再给一个不超过1000个字符长的同样由上述字母组成的母串S, 问在S中至少要修改多 少个字符,才能使其不包含任何模式串。思路:对模式串建立AC自动机。然后在其上进行动态规划。Ans[i][j]表示若要用长度为i的母串的前缀遍历DFA树, 使之达到节点 j ,至少要修改的字符数量原创 2015-07-29 22:20:09 · 525 阅读 · 0 评论 -
poj 2778 AC自动机+快速幂(DNA Sequence)
题意:与poj1625类似。有n种DNA序列(由AGCT四个字符组成)是有疾病的,问有多少种长度为m的DNA序列不包含任何一种有疾病的DNA序列。思路:对疾病模式串建立AC自动机。由于m太大,不能用动归来做。建立自动机的邻接矩阵A(点只取非危险节点),值A[i][j]表示从节点i到节点j的路径数(即多少个字符能够使得从节点i到节点j,可知此矩阵的每行每列的和不会大于4)。那么A^n[i][j]原创 2015-07-30 10:31:20 · 371 阅读 · 0 评论 -
poj 1625 AC自动机+动归+大数加法
题意:给出一个字符集V和P个模式串(长度小于10),问由这个字符集中字符组成的长度为N的且不包含任意一个模式串的字符串有多少个?(字符集大小,N思路:先将P个模式串建立AC自动机,标记好危险节点(flag数组)。然后动归来求:dp[i][j]表示长度为i且最后在节点j的字符串个数(节点j必为安全节点),初始dp[0][1] = 1, 其他dp[i][j] = 0。由dp[i][j] 可以导出,原创 2015-07-29 11:05:15 · 374 阅读 · 0 评论 -
HDU 2896/3065 病毒侵袭(AC自动机)
题意:第一行,一个整数N(1接下来N行,每行表示一个病毒特征码,特征码字符串长度在20—200之间。每个病毒都有一个编号,依此为1—N。不同编号的病毒特征码不会相同。在这之后一行,有一个整数M(1接下来M行,每行表示一个网站源码,源码字符串长度在7000—10000之间。每个网站都有一个编号,依此为1—M。以上字符串中字符都是ASCII码可见字符(不包括回车)。输出原创 2015-07-28 13:29:21 · 408 阅读 · 0 评论 -
HDU 2222 目标串中模式串数量(AC自动机)
题意:给定n(n≤50)个模式串(每个模式串长度不超过50)和1个目标串(长度不超过1000000),问目标串中包含多少个模式串。思路:用模式串建立DFA,然后用目标串扫一遍即可。使用数组建立DFA,模板参考(http://www.cnblogs.com/kuangbin/p/3164106.html)。数组开500000一只TLE,减小到250000才能AC(但是链接中的数组开的就是5000原创 2015-07-27 20:00:24 · 530 阅读 · 0 评论 -
poj 3080(3450) KMP(暴力也能过) 多个串的最长公共子串
题意:给定m(m思路:暴力找出第一个串的所有长度大于等于3的子串,用KMP算法求其是否为剩下m-1个串的子串。为了复用next数组,枚举子串时先固定起点(求一遍next数组即可),然后由长到短枚举子串(剪枝)。#include #include using namespace std;#define N 60char s[12][N+5],t[N+5],res[N+5];int原创 2015-04-27 21:24:21 · 387 阅读 · 0 评论 -
poj 2185 next数组应用(用最小矩形铺砖)
题意:在字符矩阵中找出一个最小子矩阵,使其多次复制所得的矩阵包含原矩阵。思路:(http://blog.sina.com.cn/s/blog_69c3f0410100tyjl.html)看的别人的题解。第一步也是找最小重复子矩阵的宽,网上的大部分代码就卡在这里,如实例(poj讨论数据):实例1:2 8ABCDEFABAAAABAAA实例2:2 8ABCDEFAB原创 2015-04-30 11:50:17 · 429 阅读 · 0 评论 -
poj 2752 KMP的next数组应用(prefix-suffix string)
题意:给定一个串,求其所有的同为前缀和后缀的子串的长度。思路:用KMP预处理的next数组就可以解决,时间为O(n)。可以这样想,符合题意的最长的串必为原串,次长度为next[len-1],这是由next数组的定义决定的。再次长度就是对str[0,next[len-1]]这个串去求,也就是next[next[len-1]]这么长。所以递归求下去就可以了。#include #include原创 2015-04-26 10:32:24 · 499 阅读 · 0 评论 -
poj 3974 Manacher算法(判断最长回文子串)
题意:给定一个字符串,求其最长回文子串。思路:暴力O(n^3),遍历中间节点向两边扩展O(n^2)。然后Manacher的O(n)算法是最优算法。以下内容转自(http://blog.youkuaiyun.com/yzl_rex/article/details/7908259)这个算法做了一个简单的处理,很巧妙地把奇数长度回文串与偶数长度回文串统一考虑,也就是在每个相邻的字符之间插入一个分隔符,串的首原创 2015-12-09 09:16:07 · 449 阅读 · 0 评论