这题还是挺经典的
首先的话,是建立自动机的过程。其实就是一个状态的转移,看一个字典树中的某子串加上一个字母是否会变成一个非法的串,然后都给标记起来。
最后就看有多少种状态,就建立多大的矩阵,对某种状态,如果加上一个字母后是合法的,就把表示状态可以转移。对应的矩阵中的位置就++
然后就是矩阵乘了,乘了k次后的矩阵x[i][j] 就表示从i状态到j状态路径转移长度为k的个数 ,那最后的结果就是从0状态到所有状态的和了
需要注意的是取模运算耗费的时间很大,能尽量减少就减少这种操作。
[cpp]
include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include