我用AC自动机A掉了。
由于长度是40,40/3=13
我们先可以把所有禁止出现的子串搜出来,最多有16000多个。
然后我们建一个AC自动机。
预处理出go[i,0]和go[i,1]表示在自动机第i个节点后键入0或1,转移到的自动机的节点编号。
如果go[i,0]或go[i,1]恰好是某个禁止子串的结尾,那么就令go[i,0]或go[i,1]等于-1
方程:
设f[n,i]表示长度为n,并且当前状态在自动机第i个节点时的方案数。
用f[n,i]的值更新f[n+1,go[i,0]]和f[n+1,go[i,1]]的值。
最后输出sigema{f[n,i]}(1<=i<=自动机节点数)