随笔分类 - 字符串--AC自动机
摘要:链接解码之后是跟普通的自动机求解一下的,只不过解码比较恶心,512=》N》=0 ,所以不能用字符串来存,需要转换成整数来做。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8...
阅读全文
摘要:l链接这题想了好一会呢。。刚开始想错了,以为用自动机预处理出k长度可以包含的合法的数的个数,然后再数位dp一下就行了,写到一半发现不对,还要处理当前走的时候是不是为合法的,这一点无法移到trie树上去判断。之后想到应该在trie树上进行数位dp,走到第i个节点且长度为j的状态是确定的,所以可以根据t...
阅读全文
摘要:链接这题没想到怎么做,问了下p队长,大悟。。先求出任意两串的在trie树上的最短距离,期间是不能走到不合法的地方,我是用spfa求得,在更新和加入节点时判断一下是不是合法位置。求出最短距离之后,找出一条从0出发遍历所有串的最短距离,可以dp出,dp[i][j]表示当前状态以节点j串结尾的最短距离。枚...
阅读全文
摘要:链接类似的dp省赛时就做过了,不过这题卡内存,需要把当前状态hash一下,可以按进制来算出当前的状态,因为所有的状态数是不会超过10*10*10*10的,所以完全可以把这些存下来。刚开始把trie的的遍历节点写在外层循环了,一直WA,后来想了一下,状态是只会向前走的,但是节点不一样,如果由 当前节点...
阅读全文
摘要:链接预处理出来任意两点的距离,然后可以顺着trie树中的节点走,不能走到不合法的地方,另开一维表示走到了哪里,依次来更新。注意判断一下起点是不是合法。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include ...
阅读全文
摘要:链接dp[x][y][node][sta] 表示走到在x,y位置node节点时状态为sta的方法数,因为只有2个病毒串,这时候的状态只有4种,根据可走的方向转移一下。这题输入的是m、N,先列后行,因为输反了,WA了N次啊。。 1 #include 2 #include 3 #include ...
阅读全文
摘要:链接当时是因为没有做出来这道题才开了自动机的专题,现在看看还是比较简单的。因为每个病毒串只算一次,只有10个病毒串,可以状压一下哪些状态是可以达到的,最后取一个最大值。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #...
阅读全文
摘要:链接这个题把病毒分为了两种,一种包含可以覆盖,另一种不可以,需要分别求出包含他们的个数,可以把两种都建在一颗tire树上,在最后求得时候判断一下当前节点是属于哪种字符串,如果是不包含的需要判断一下pre[i]+len[i] 2 #include 3 #include 4 #include 5...
阅读全文
摘要:链接这个题把病毒分为了两种,一种包含可以覆盖,另一种不可以,需要分别求出包含他们的个数,可以把两种都建在一颗tire树上,在最后求得时候判断一下当前节点是属于哪种字符串,如果是不包含的需要判断一下pre[i]+len[i] 2 #include 3 #include 4 #include 5...
阅读全文
摘要:链接从开始节点往下走,不能走到病毒节点,如果当前状态与原始串不一样就+1,取一个最小值. 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #incl...
阅读全文
摘要:链接dp[i][j]表示长度为i在节点J的时候的权值最大值,根据trie树转移一下就行,需要每次都取最小的,所以需要另开一数组保存字典序最小的状态。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7...
阅读全文
摘要:链接状压dp+acdp[i+1][next[j]][st|tt]表示第i+1长度结点为next[j]状态为st|tt的时候的ans;dp[i+1][next[j]][st|tt]+=dp[i][j][tt]; st记录当前结点是否为给定单词的结束点后一维用01状态表示截止到目前结点为止所包含的单词数...
阅读全文
摘要:链接跟2778差不多,解决了那道题这道也不成问题如果做过基本的矩阵问题。数比较大,需要用unsigned longlong 就不需要mod了 溢出就相当于取余 1 #include 2 #include 3 #include 4 #include 5 #include 6 #inclu...
阅读全文
摘要:链接看此题前先看一下matrix67大神写的关于十个矩阵的题目中的一个,如下:经典题目8 给定一个有向图,问从A点恰好走k步(允许重复经过边)到达B点的方案数mod p的值把给定的图转为邻接矩阵,即A(i,j)=1当且仅当存在一条边i->j。令C=A*A,那么C(i,j)=ΣA(i,k)*A(k,j...
阅读全文
摘要:链接第一次做这种题目,参考了下题解,相当于把树扯直了做DP,估计这一类题都是这个套路吧。状态方程dp[i][next] = dp[i][next]+dp[i][j] ;dp[i][j]表示长度为i的第J个结点的时候满足题意的num,next为当前j点所能走到的下一个合法的结点。需要用高精度,看到一些...
阅读全文
摘要:链接上一篇的姊妹篇没啥好说的 套模板 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 using namespace std...
阅读全文
摘要:链接ac自动机的模板题说2个注意的地方 一是题目说明包含所有ASCII字符,可以开到0-127 包含空格题目会输入多个源串,在加完当前的val值时,不应清0,可以开个标记数组。 1 #include 2 #include 3 #include 4 #include 5 #include ...
阅读全文
摘要:贴份模板胡大神和崔大神的组合模板#include #include#include#include#include#include#include#include#includeusing namespace std;#define N 1000010#define LL long long#def...
阅读全文
摘要:专题链接第一题--hdu2222Keywords Search ac自动机的模板题,入门题。 题解第二题--hdu2896病毒侵袭 一类病毒的入门题,类似模板 题解第三题--hdu3065病毒侵袭持续中 上一篇的姊妹篇,套模板。题解第四题--zoj3430Detect the Virus需要解码,...
阅读全文