题意:
百度。
思路:
然后还要注意到自己的串本身会叠加字典树中的前缀,要标记掉。
#include <bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<int,int> PII; const int N=2e6+10; int g[N][27],sz,num[N],id[N]; int n,m; void INS(char *str,int temp) { int p=0; int len=strlen(str),index; for(int i=0;i<len;i++) { index=str[i]-'a'; if(!g[p][index]) { sz++; memset(g[sz],0,sizeof(sz)); g[p][index]=sz; } p=g[p][index]; if(id[p]!=temp) { num[p]++; id[p]=temp; } } } int query(char *str) { int p=0; int len=strlen(str),index; for(int i=0;i<len;i++) { index=str[i]-'a'; if(!g[p][index]) return 0; p=g[p][index]; } return num[p]; } int main() { char s[23]; scanf("%d",&n); memset(g[0],0,sizeof(g[0])); sz=0; while(n--) { scanf("%s",s); int len=strlen(s); for(int i=0;i<len;i++) INS(s+i,n); } scanf("%d",&m); while(m--) { scanf("%s",s); printf("%d ",query(s)); } return 0; }