hihocoder1014(Trie树)

来源:互联网 发布:祥南行书体 mac 编辑:程序博客网 时间:2024/05/17 17:45

链接:点击打开链接

题意:有A,B两个集合,A中含有n个字符串,B中含有m个字符串,询问A中以B中每个字符串为前缀的串有多少个

代码:

#include <queue>#include <vector>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;char a[15];int rt,v[1000005],s[1000005][30];void in(char a[]){    int i,u;    u=0;    for(i=0;a[i];i++){        if(!s[u][a[i]-'a'])        s[u][a[i]-'a']=rt++;        v[s[u][a[i]-'a']]++;        u=s[u][a[i]-'a'];    }}int get(char a[]){    int i,u;    u=0;    for(i=0;a[i];i++){        if(!s[u][a[i]-'a'])        return 0;        u=s[u][a[i]-'a'];    }    return v[u];}                                               //Trie树模板,主要就是在建树的时候int main(){                                     //同时统计出每个前缀的数量    int n,m,i,j;    while(scanf("%d",&n)!=EOF){        memset(s,0,sizeof(s));        memset(v,0,sizeof(v));        rt=1;        for(i=1;i<=n;i++){            scanf("%s",a);            in(a);        }        scanf("%d",&m);        for(i=1;i<=m;i++){            scanf("%s",a);            printf("%d\n",get(a));        }    }    return 0;}

原创粉丝点击