字符串—ac自动机
文章平均质量分 81
Ezereal
这个作者很懒,什么都没留下…
展开
-
hdu 2222 Keywords Search (模板)
题意: 题意:给出n个串,然后给一篇文章,问这n个串有多少个在文章里面出现过。。。 trick:n个串可能有相同的,需按照不同串处理。 #include #include #include #include #include #include #include #include #include #include #include #include #includ原创 2016-04-01 09:54:23 · 341 阅读 · 0 评论 -
hdu 4117 GRE Words (AC自动机+线段树)★ ★
题意:给出n个字符串,每个字符串有一个权值,我们从中拿出若干个来,这若干个字符串,前一个必须是后一个的子串,问,我们能拿出的这若干个串的权值和最大是多少。 解题思路:AC自动机。字符串匹配算法,大概就是kmp,ac自动机,后缀数组,后缀自动机这么几种了。对于这题,我们很容易想到暴力dp,用kmp去匹配,总复杂度可以做到o(n^2+2*m)(n为字符串个数,m为所有字符串的总长),但这样还不够转载 2016-09-26 10:10:53 · 407 阅读 · 0 评论 -
2016 ACM/ICPC Asia Regional Qingdao hdu5880 Family View
题意:敏感词屏蔽,给一堆敏感词,给一段文本,要求把文本中所有的敏感词用*代替。 题解:对敏感词建出AC自动机,在AC自动机上跑文本,就可以得到文本的每个前缀的最长匹配后缀,扫一遍即可得到结果。 #include #include #include #include #include #include #include #include #include #includ原创 2016-09-19 09:48:33 · 592 阅读 · 0 评论 -
HDU 2296 Ring (AC自动机+DP)
题目:给出m个模式串,每个串有一定的分值,构造一个长度不超过n的串,使得分值最大,输出长度最小,字典序最小的串 明显的AC+DP,dp[i][j]表示长度为i的时候,在Trie上的第j个结点时的最大分值,path[i][j]表示状态(i,j)时的字典序最小的串。 忘了考虑中间dp相等时还要更新字符串大小 #include #include #include #include #i原创 2016-08-11 11:45:08 · 375 阅读 · 0 评论 -
HDU 3247 Resource Archiver(AC自动机+BFS+状态DP)
题目:给出n个资源,m个病毒,将资源串拼接成一个串,必须包含所有的资源串,可以重叠,但是不能包含病毒 问最小的长度为多少 将所有的资源串和病毒串都放在Trie树里建立起来,当然作上相应的标记。然后建立fail指针之后 从资源串的结尾出发,BFS,记录能到达其它资源串结尾的步数。得到所有资源串结尾状态的距离邻接阵。 之后是状态压缩DP dp[i][j]表示资源串的状态为i时,最后一原创 2016-08-08 16:27:13 · 348 阅读 · 0 评论 -
HDU 4511 小明系列故事——女友的考验 (AC自动机+DP)
题意: 终于放寒假了,小明要和女朋友一起去看电影。这天,女朋友想给小明一个考验,在小明正准备出发的时候,女朋友告诉他,她在电影院等他,小明过来的路线必须满足给定的规则: 1、假设小明在的位置是1号点,女朋友在的位置是n号点,则他们之间有n-2个点可以走,小明每次走的时候只能走到比当前所在点编号大的位置; 2、小明来的时候不能按一定的顺序经过某些地方。比如,如果女朋友告诉小明不转载 2016-08-08 09:19:42 · 665 阅读 · 0 评论 -
HDU4758 Walk Through Squares(AC自动机+状压DP)
题目大概说有个n×m的格子,有两种走法,每种走法都是一个包含D或R的序列,D表示向下走R表示向右走。问从左上角走到右下角的走法有多少种走法包含那两种走法。 D要走n次,R要走m次,容易想到用AC自动机上的DP解决: 用两种走法的序列构造AC自动机dp[i][j][S][k]表示D用了i个R用了j个,且当前走到自动机的S结点,已经包含的走法的状态集合是k的方案数转移就是走R或者走D了,我用我原创 2016-08-08 09:19:22 · 327 阅读 · 0 评论 -
HDU 3341 Lost's revenge(AC自动机+DP+变进制优化)
题目是给一个DNA重新排列使其包含最多的数论基因。 字符最长是40 只需要记录ACGT出现的次数。 如果使用5维数组,显然超内存了。 假设ACGT的总数分别为num[0],num[1],num[2],num[3] 那么对于ACGT的数量分别为ABCD的状态可以记录为: A*(num[1]+1)*(num[2]+1)*(num[3]+1) + B*(num[2]+1)*(num[3]原创 2016-08-11 10:09:06 · 607 阅读 · 0 评论 -
HDU-3065 病毒侵袭持续中 (fail指针)
Problem Description 小t非常感谢大家帮忙解决了他的上一个问题。然而病毒侵袭持续中。在小t的不懈努力下,他发现了网路中的“万恶之源”。这是一个庞大的病毒网站,他有着好多好多的病毒,但是这个网站包含的病毒很奇怪,这些病毒的特征码很短,而且只包含“英文大写字符”。当然小t好想好想为民除害,但是小t从来不打没有准备的战争。知己知彼,百战不殆,小t首先要做的是知道这个病毒网站特征:原创 2016-04-01 10:36:54 · 768 阅读 · 0 评论 -
HDU 4787 GRE Words Revenge(在线AC自动机)★ ★
题意:Coach Pang学习英语单词,总共有n个操作,2种操作。每行读入一个字符串。 如果字符串以+开头,此为单词(即模式串,不考虑重复)如果字符串以?开头,此为文章(即文本串,查询在此之前的单词在文本串中出现的次数) 需要注意的是,文章是被加密过的,加密的方法就是将文章看作一个环,每次旋转上一次询问的答案次数。具体看输入即可。 思路:如果只建一个AC自动机的话,每次插入单词后转载 2016-09-26 21:39:54 · 447 阅读 · 0 评论