1. 程式人生 > >hdu 1251 字典樹

hdu 1251 字典樹

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
struct node
{
    int num;
    int next[26];
    void ini()
    {
        num=0;
        memset(next,-1,sizeof(next));
    }
}a[3000000];
int p;
inline void po()
{
    a[p=0].ini();
}
inline void insert(char *s)
{
    int
k=0; for(int i = 0; s[i]!='\0'; i++) { int x=s[i]-'a'; if(a[k].next[x]==-1) { a[++p].ini(); a[k].next[x]=p; } k=a[k].next[x]; a[k].num++; } } inline int query(char *s) { int k=0; for(int i = 0; s[i]!='\0'; i++) { int
x=s[i]-'a'; if(a[k].next[x]==-1) return 0; k=a[k].next[x]; } return a[k].num; } int main() { po(); char s[11]; while(gets(s),*s) insert(s); while(gets(s)) printf("%d\n",query(s)); }