裸题:https://www.acwing.com/problem/content/144/
相似题目:
存一个字典树模板
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> using namespace std; int n,m; int trie[1000010][26],tot=1,cnt[1000010]; void Insert(char *str) { int len=strlen(str),p=1; for(int k=0;k<len;k++) { int ch=str[k]-'a'; if(trie[p][ch]==0) trie[p][ch]=++tot; p=trie[p][ch]; } cnt[p]++; } int Search(char *str) { int len=strlen(str),p=1,res=0; for(int k=0;k<len;k++) { p=trie[p][str[k]-'a']; if(p==0) break; res+=cnt[p]; } return res; } int main() { scanf("%d%d",&n,&m); char str[1000010]; for(int i=1;i<=n;i++) { scanf("%s",str); Insert(str); } for(int i=1;i<=m;i++) { scanf("%s",str); int ans=Search(str); printf("%d ",ans); } return 0; }