随笔分类 - ACM——字符串
摘要:首先献上模板:http://www.cnblogs.com/E-star/archive/2013/03/08/2950191.html多模式串匹配:HDU 2222Keywords Searchhttp://acm.hdu.edu.cn/showproblem.php?pid=2222题意:http://www.cnblogs.com/E-star/archive/2013/02/19/2917212.html这个链接是之前用指针形式做的,下面是数组模拟:View Code #include <iostream>#include <cstdio>#include &l
阅读全文
摘要:http://poj.org/problem?id=2778题意:给定n个病毒DNA串,求一个长度为m的DNA片段不包含任何一个病毒串的的可能数?思路:首先根据n个DNA串构造AC自动机,然后根据AC自动机构造矩阵,然后转化到Matrix大神的是个利用举证解决的问题的例八中去。才开始我一直以为推出的举证和斐波那契数列的意思一样,转了个死弯,这里是把AC自动机这个图转化为邻接矩阵,然后求从一个状态到另一个状态经过m条边的的可能数。这个通过AC自动机得到的矩阵其实就是一个关系矩阵。这里借鉴了一下胡浩大神的AC自动机模板://#pragma comment(linker,"/STACK:3
阅读全文
摘要:http://poj.org/problem?id=3691题意:给出n个DNA病毒串,然后给出一个需要修改的DNA片段,问需要最少修改多少个字符才能是该DNA片段不含DNA病毒串,修改后的DNA片段长度不变思路:这题看了一天了,DP那地方好难懂。首先这里是多串匹配,我们用Trie树和fail的构造确定性有限状态自动机(DFA),然后再DFA上进行DP;这里我DP理解了很长时间,dp[i][j]表示主串匹配到了第i个位置,然后到达的是AC自动机上的j状态时修改字符的个数,我们保证j状态不是模式串(DNA病毒串)的结束节点,然后不断地往后走选出一条匹配完主串,并且修改字符串数最少的的一条。dp[
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2896题意:中文......思路:这里就知识循环枚举每一个网址即可,set记录每个网址包含的病毒的编号。//#pragma comment(linker,"/STACK:327680000,327680000")#include <iostream>#include <cstdio>#include <cmath>#include <vector>#include <cstring>#include <algorithm&g
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2222题意:给出n个单词,再给出一段包含m个字符的文章,求有多少个单词在文章里出现过。思路:才开开始以为简单的Trie数就可以,结果TLE到无语,字典树枚举每一个查找单词的第一个字母的话是O(N*50)前边还有一个T计算的话会超时,看了一下解题报告原来是AC自动机的基础应用。给出一个不错的链接http://blog.himdd.com/?p=2169这里讲的很详细。想不到,回校第一个题目竟然是4个2的题号,无语。。。。//#pragma comment(linker,"/STACK:32768000
阅读全文
摘要:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1465题意:中文.....思路:1:暴力枚举两个字符串长度的最大公倍数的因子,作为因子的长度,然后从s1中去出来,做比较,才开始手搓打错了一个地方导致一直tle.2:同样是枚举两个字符串长度的最大公倍数的因子,作为因子的长度,然后从s1中去出来作比较,这里可以用kmp做,之际一路比较下去。//#pragma comment(linker,"/STACK:327680000,327680000") #include <i
阅读全文
摘要:bcmp(比较内存内容)相关函数bcmp,strcasecmp,strcmp,strcoll,strncmp,strncasecmp表头文件#include<string.h>定义函数intbcmp(constvoid*s1,constvoid*s2,intn);函数说明bcmp()用来比较s1和s2所指的内存区间前n个字节,若参数n为0,则返回0。返回值若参数s1和s2所指的内存内容都完全相同则返回0值,否则返回非零值。附加说明建议使用memcmp()取代。范例参考memcmp()。bcopy(拷贝内存内容)相关函数memccpy,memcpy,memmove,strcpy,ct
阅读全文
摘要:pku 1961http://poj.org/problem?id=1961题意:给定一个长度为n的字符串,求他的前缀且前缀满足本身为周期字符串。例:aabaabaab 长度为9 周期为3思路:kmp几乎忘干净了,开始学的时候也没有真正的理解,今天看了好长时间的getnext函数;我们在对字符串本身处理得到next函数时,next[i]记录的就是s[1,next[i]] 与s[i - next[i] + 1,i]相同时的值,这里next[i]也表示了相同区间的长度,我们的坐标从0开始则只要(i + 1)%(i - next[i]) == 0就能满足该字符串前缀是周期字符串,i+1表示的是当前枚
阅读全文
摘要:http://poj.org/problem?id=1035开始自己把它想成了一个模拟题,就是模拟整个过程,纯暴力,不过把输入的字符串按长度排序,记录每个长度的起点终点,然后在长度范围内查找,输出时注意不能出线重复,以及按在输入序列中的出现顺序输出,所以要编号,输出时,按编号排序输出,对编号进行hash映射,判重,可是就是TLE那整的我叫个郁闷啊。。。下面这个方法很简洁明了,自己还是思维不够完善,没考虑好。View Code #include <cstdio>#include <cstring>#define maxn 10007using namespace std;
阅读全文