题意 给定n个模式串,有m个询问,每次询问第X个模式串在第Y个模中出现了多少次 解题思路 以fail树相反的方向建一棵树T,问题转化为X的子树中有多少个y的终止节点.跑出T的dfs序,X的子树就可以表示为一段区间,然后对trie跑一遍dfs,每进入一个点就把dfs序列上对应的位置+1,离开一个点就把dfs序列上对应的位置-1,遍历到y的终止节点就计算所有Y=y的询问的结果,计算方法就是区间求和,用树状数组或线段树可以轻易地维护. AC代码 #include<bits/stdc++.h> usi…