AC自动机整理
No__stop
这个作者很懒,什么都没留下…
展开
-
hdu2825 Wireless Password
hdu2825 Wireless Password大致题意是:包含下面n个单词中至少m个的长为k个的字符串有几个,ndp[i][j][k]表示长度为i,走到j号节点,状态为k的种数。我是用广搜搜出来的#include#include#include#includeusing namespace std ;const int mod = 20090717 ;int原创 2013-05-15 16:33:29 · 1008 阅读 · 0 评论 -
hdu 4878 ZCC loves words(AC自动机+dp+矩阵快速幂+中国剩余定理)
hdu 4878 ZCC loves words(AC自动机+dp+矩阵快速幂+中国剩余定理)题意:给出若干个模式串,总长度不超过40,对于某一个字符串,它有一个价值,对于这个价值的计算方法是这样的,设初始价值为V=1,假如这个串能匹配第k个模式串,则V=V*prime[k]*(i+len[k]),其中prime[k]表示第k个素数,i表示匹配的结束位置,len[k]表示第k个模式串的长度(注原创 2014-08-14 19:51:49 · 1339 阅读 · 0 评论 -
hdu 4787 GRE Words Revenge (在线AC自动机)
hdu 4787 GRE Words Revenge (在线AC自动机)题意:学习英语单词,有n个操作,每次可以读入一个单词,或者询问一个文本串,查询有多少个不同的单词已读入。文本是被加密过的,加密的方法就是将文本旋转上一次询问的答案次。旋转的操作不解释了,看下题目吧。解题:AC自动机。大致的思路是用两个自动机,一个heap,一个buf,buf限制一个容量,buf插满了之后,再把buf合并原创 2013-11-19 14:11:35 · 3928 阅读 · 2 评论 -
zoj 3535 Gao the String II(ac自动机+dp)
Gao the String II题意:有字符串集合A,B。每个集合内最多有50个字符串,每个字符串长度不超过10,用A集合内的字符串link(link操作就是连接,比如已经link得到一个s,那么可以直接在s后面接上一个A里面的字符串,也可以将s的后缀跟要接上的串的前缀叠在一起连接)成一个长度不超过L的字符串s,问s与每一个B里面的字符串匹配,得到的匹配位置数之和最大是多少?ps:比赛的时候原创 2014-04-08 12:21:54 · 1306 阅读 · 0 评论 -
lightoj 1427 Substring Frequency (II) (ac自动机)
lightoj 1427 Substring Frequency (II) (ac自动机)题意:求每个模式串在母串中出现的次数。解题思路:ac自动机(显然)。类似模板题,但是这题查询的时候不能一直沿着fail边走,而是要用到fail树上的拓扑,最后dp往上推。#include#include#include#includeusing namespace std ;con原创 2013-11-08 19:53:20 · 1600 阅读 · 0 评论 -
Codeforces 86C Genetic engineering (AC自动机好题)
Codeforces 86C Genetic engineering (AC自动机好题)题意:给出一个字符串集合,总共有m个字符串,每个字符串长度不超过10。然后给出一个n,构造长度为n的串,这个串上的每一个字符,往前,往后延伸构成的若干个字符串中,至少有一个包含在字符集里的某一个字符串里面。问有多少种构造方法。。解题思路:AC自动机。。这题还是比较难想的啊。首先我们可以定下两维状态,dp原创 2013-10-16 13:06:04 · 1788 阅读 · 0 评论 -
hdu 3341 Lost's revenge
hdu 3341 Lost's revenge题意:给出n个子串,和一个母串。问用母串中的字符最多可以组合出几个子串。可以重叠最裸的是用dp[i][a][b][c][d]表示走到i号节点,用了a个'A' b个'G' c个'C' d个'T',但是这样开不下,用状态压缩,把a,b,c,d压缩成一维,因为总数只有40个,所以压缩后,状态不会很大,开个15555就可以过了。#include#原创 2013-05-18 11:34:44 · 1071 阅读 · 0 评论 -
zoj 3228 Searching the String
zoj 3228 Searching the String题意:让你找字符串有几个,字符串分为两种,一种是可以重叠的,另一种是不能重叠的。在节点下开个0,1的标记,把cnt指针指向该标记,1的统计就是模板,0的统计只要看前一次统计时在原串的位置与当前位置只差是否大于等于长度#include#include#include#includeusing namespace std ;原创 2013-05-18 11:27:46 · 762 阅读 · 0 评论 -
空罐Cans
空罐Cans题意:中文题,不多说了用dp[i][j][k]表示第i天,长度为j的,走到了k节点罐子有几个,第i+1天的时候,罐子分裂,就加一个儿子。基因缩短,看当前节点的深度是否小于j-1,如果小于,就走到k的fail节点,否则还是在k节点。状态我是用广搜搜出来的。#include#include#include#includeusing namespace std ;co原创 2013-05-18 11:17:04 · 1175 阅读 · 0 评论 -
hdu 3247 Resource Archiver
hdu 3247 Resource Archiver有点难想,要把资源串和病毒串一起建到Trie图上(节点数这时是6W了,而不是5W)。要充分理解题目所给的,资源串不包含病毒串这个条件。由n的范围1-10,很容易想到是用状态压缩dp去接字符串,关键是怎么定义状态,这里我就把我的状态定义先给出来,用dp[i][j]表示j状态,以第i个字符串结尾的最小长度。往下接一个k的话,我们要知道j跟k相接时原创 2013-05-17 15:58:01 · 829 阅读 · 0 评论 -
poj1625 Censored!
poj1625 Censored!题目大意:给出n个模式串,问长为m的不包含任何一个模式串的字符串有多少个dp[i][j]表示长度为i,走到j号节点的种数。要用大数,插入时,把asscil码都加上128,避免负值自己整理的大数模版很挫,可以忽略#include#include#include#include#include#includeusing namespace原创 2013-05-15 17:27:52 · 803 阅读 · 0 评论 -
hdu2296 Ring
hdu2296 Ring题目大意是:给出m个模式串,每个模式串都有一个价值,出现一次就累加一次价值,输出价值最大的字符串,若价值相同,就输出最短的一个,若长度也相同,就输出字典序最小的一个。我们可以把字符串的价值加在trie的节点上,用dp[i][j]表示长度为i,走到j号节点最大价值是多少。插入时要把模式串翻转,以便找出字典序最小#include#include#includ原创 2013-05-15 16:56:47 · 878 阅读 · 0 评论 -
hdu2457 DNA repair
hdu2457 DNA repair题目大意:给出n个模式串,和一个母串,问可以改变最少多少个母串中的字符可以使得母串不包含模式串dp[i][j]表示长度为i,走到j号节点时,最少修改几次#include#include#include#includeusing namespace std ;const int maxn = 1111 ;short dp[maxn][11原创 2013-05-15 17:13:12 · 863 阅读 · 0 评论 -
hdu 4117 GRE Words (AC自动机+线段树)
hdu 4117 GRE Words (AC自动机+线段树)题意:给出n个字符串,每个字符串有一个权值,我们从中拿出若干个来,这若干个字符串,前一个必须是后一个的子串,问,我们能拿出的这若干个串的权值和最大是多少。解题思路:AC自动机,好题啊。字符串匹配算法,大概就是kmp,ac自动机,后缀数组,后缀自动机这么几种了。对于这题,我们很容易想到暴力dp,用kmp去匹配,总复杂度可以做到o(n原创 2013-10-04 18:51:36 · 2526 阅读 · 0 评论