题意:给一些字符串的集合S和整数n,求满足 长度为n 只含charset = {'A'.'T‘.'G'.'C'}包含的字符 不包含S中任一字符串 的字符串的种类数. 思路:首先对S建立ac自动机,考虑向ac自动机中的每种状态后加charset中的字符,如果终态不为“接受状态”,也就是不与S中的任一字符串匹配,则将这次转移记为有效,方法数加1.这样可以建立状态之间的转移矩阵D,表示由一个状态接受1个字符后的方案数,D自乘n次,就得到了任一状态接受n个字符形成的不同字符串种类数,其中从“0”到“i”…
[题意]给定n个原串和m个禁忌串,要求用原串集合能拼出的不含禁忌串且长度为L的串的数量.(60%)n,m<=50,L<=100.(40%)原串长度为1或2,L<=10^18. [算法]AC自动机+DP+矩阵快速幂 [题解]其实题意的数据范围不太清晰,反正开200个点就足够了. 因为要匹配禁忌串,所以对禁忌串集合建立AC自动机,标记禁忌串结尾节点,以及下传到所有能fail到的点(这些点访问到都相当于匹配了禁忌串). 令f[i][j]表示匹配到节点i,长度为j的串的数量,先预处理a[i][j…
题意:给定一些串,然后让你构造出一个长度为 m 的串,并且不包含以上串,问你有多少个. 析:很明显,如果 m 小的话 ,直接可以用DP来解决,但是 m 太大了,我们可以认为是在AC自动机图中,根据离散中的矩阵的幂可以表示 从 i 到 j 需要 x 步的有多少条.比如A[1][2]^5 = 10,表示从结点 1 到结点 2 走五步有10种方法,利用这种方法,就可以直接进行矩阵快速幂了. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000…
DNA Sequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11860   Accepted: 4527 Description It's well known that DNA Sequence is a sequence only contains A, C, T and G, and it's very useful to analyze a segment of DNA Sequence,For ex…
Luogu-3250 [BJOI2017]魔法咒语(AC自动机,矩阵快速幂) 题目链接 题解: 多串匹配问题,很容易想到是AC自动机 先构建忌讳词语的AC自动机,构建时顺便记录一下这个点以及它的所有后缀有没有忌讳词语,即对于每个AC自动机上的结点\(x\),\(p[x].p|=p[p[x].f].p\) 然后前半部分分和后半是两道完全不同的题目(滑稽 前60分: 这些部分分的特征是\(L\le 100\) 直接AC自动机上\(dp\)就好了,枚举匹配长度\(i\),当前匹配到的点\(x\),以及…
[题意]给定n个禁忌字符串和字符集大小alphabet,保证所有字符在集合内.一个字符串的禁忌伤害定义为分割能匹配到最多的禁忌字符串数量(一个可以匹配多次),求由字符集构成的长度为Len的字符串的期望禁忌伤害.n<=5,1<=alphabet<=26,len<=10^9. [算法]AC自动机+期望+矩阵快速幂 [题解]参考:BZOJ2553: [BeiJing2011]禁忌 首先对于一个确定的字符串,每个匹配的禁忌字符串视为一条线段,就是经典的不重叠最大线段数问题. 通用的贪心做法…
考虑对一个串如何分割能取得最大值.那么这是一个经典的线段覆盖问题,显然每次取右端点尽量靠前的串.于是可以把串放在AC自动机上跑,找到一个合法串后就记录并跳到根. 然后考虑dp.设f[i][j]表示前i位走到AC自动机上j节点的概率,枚举下个字符即可转移.同时记录此时期望伤害,找到合法串就统计入答案. 并且注意到每次转移是相同的.矩阵快速幂优化即可. 以及非常卡精度,需要全程long double.cout的保留小数位数误差是相当大的,必须用printf.并且转移到某个字符的概率即1/alphab…
题意 : 给出一些病毒串,问你由ATGC构成的长度为 n 且不包含这些病毒串的个数有多少个 分析: 我们先分析Tire 图的结构 : Trie图是在AC自动机的原型上增添边使得状态可以快速转移,标记危险的节点(后缀是不良单词的节点): 那我们是想构造长度是n不包含不良串对不对 , 那是不是在trie图上从0节点走n步到安全节点的方案数(Trie图也是状态转移图) 在一个有向图中,A走k步到B的方案数(这显然是经典的矩阵快速幂问题),(原理需要自己搜索)先对原图建立一个邻接表M[i][j] , M…
题意:有m种DNA序列是有疾病的,问有多少种长度为n的DNA序列不包含任何一种有疾病的DNA序列.(仅含A,T,C,G四个字符) 解题关键:AC自动机,实际上就是一个状态转移图,注意能少取模就少取模,尤其是在快速幂的时候,消耗时间极其巨大,此题效率差10倍. 先+=在进行取模,两者分开,也可以快1倍. 按照AC自动机建立邻接矩阵,其中不含病毒模式串的位置可以到达, 其中上图矩阵为: 2 1 0 0 1 2 1 1 0 0 1 1 0 1 1 2 1 0 0 1 2 1 0 0 1 去掉病毒结点之…
Description It's well known that DNA Sequence is a sequence only contains A, C, T and G, and it's very useful to analyze a segment of DNA Sequence,For example, if a animal's DNA sequence contains segment ATC then it may mean that the animal may have…