题目大意:给定一些含有疾病的DNA序列,现在给定DNA长度,问有多少种不同的DNA序列是健康的。
解题思路:对DNA片段建立AC自动机,因为最多10个串,每个串最长为10,所以最多可能有100个节点,在长度为n时
以每个节点终止的健康字符串个数形成一个状态集,通过AC自动机形成的边可以推导出n+1的状态集,走到单词节点是
非法的,所以同样的我们可以先走到单词节点,但是从单词节点不向后转移。这样可以构造一个矩阵,剩下的就是矩阵
快速幂。注意的一点是,因为是AC自动机,所以单词节点也包括last非空的节点。
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
#include <iostream>
#include <algorithm>
using namespa