题目大意:给定n个字符串,然后给出m次询问,问n个字符串中有多少串是当前串的前缀?
题解:Trie树模板题
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=1000000+3; int n,m; int cnt; int t[N][26],v[N]; char s[N]; void insert() { int len=strlen(s); int p=0; for(int i=0;i<len;i++) { int id=s[i]-'a'; if(!t[p][id]) t[p][id]=++cnt; p=t[p][id]; } v[p]++; } int find() { int len=strlen(s); int ans=0,p=0; for(int i=0;i<len;i++) { int id=s[i]-'a'; p=t[p][id]; if(!p) break; //呜呜呜呜没加这一行一直错 ans=ans+v[p]; } return ans; } int main() { scanf("%d%d",&n,&m); while(n--) { scanf("%s",s); insert(); } while(m--) { scanf("%s",s); printf("%d ",find()); } return 0; }