我是dp菜。。而且这是第一次写AC自动机,以前AC自动机只是停留在理论阶段,虽然写过几次trie,但是这样完整的AC自动机还是第一次写。其实AC自动机就是一个树形kmp,fail指针都那么像(其实kmp里头我叫p数组,并且我现在还不会扩展kmp,只会朴素kmp和后缀数组,所以我是字符串菜,很多东西都不会呢)。
题目大意:
给你n个字母,用这些字母组成长度为m的字符串,并且这些字符串中不能包含以下k个字符串。求总共有多少种方法。
简略题解:
构建一棵AC自动机,然后dp,f[i,ctree[j].son[k]]=sum{f[i-1,j]},然后由于结果很大要用压位高精。额,还有这题最sb的是要读字符而不是字符串,要不然就shax地RE掉,多亏了cai0715神牛,偲哥威武。。
附代码: