hdu-1251-Trie(字典树)

这个题要查询是以某个串为前缀的串的个数

那么我们可以利用val数组,初始为0,然后每次插入一个字符串的时候就令该串的所有节点val值+1

最后要查询的串的最后一个字符所对应的编号的val值就是以查询串为前缀的串的个数

这里再说下字典树的ch[i][j]记录的是编号为i的节点的子节点j的编号

比如说ab这个串,当a编号是7时,ch[7]['b'-'a']储存的就是b的编号

#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;

const int N=1000000+5;
int ch[N][30];
char s[12];
int val[N];
int sz,ans;

int idx(char c)
{
    return c-'a';
}

void Inser(char *s)
{
    int u=0,n=strlen(s);//每次从根节点开始
    for(int i=0;i='a' && s[0]<='z') Inser(s);
    while(gets(s))
    {
        ans=0;
        printf("%d\n",Find(s));
    }
    return 0;
}

 

你可能感兴趣的:(HDU)