hihoCoder #1014 : Trie树

来源:互联网 发布:java中synchronized 编辑:程序博客网 时间:2024/06/03 15:43

题目链接:

https://hihocoder.com/problemset/problem/1014

题解:

字典树模版

代码:

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define met(a,b) memset(a,b,sizeof(a))#define inf 0x3f3f3f3f;const int maxn = 26;struct Tire{    Tire *next[maxn];    int cnt;    Tire(){        cnt=0;        for(int i=0;i<maxn;i++)            next[i]=NULL;    }//    初始化}root;char s[maxn];void create(char *s){    int len=strlen(s);    Tire *p=&root;    for(int i=0;i<len;i++)    {        int pos=s[i]-'a';        if(p->next[pos]==NULL)            p->next[pos]=new Tire();//        如果为空,那么就新建一个        p=p->next[pos];        p->cnt++;    }}int search(char *s){    int len=strlen(s);    Tire *p=&root;    for(int i=0;i<len;i++)    {        int pos=s[i]-'a';        if(p->next[pos]==NULL)            return 0;        p=p->next[pos];    }    return p->cnt;}int main(){    int n;    while(scanf("%d",&n)!=EOF)    {        for(int i=0;i<n;i++)        {            scanf("%s",s);            create(s);        }        int m;        scanf("%d",&m);        while(m--)        {            scanf("%s",s);            printf("%d\n",search(s));        }    }}
原创粉丝点击