hdu1251(Trie树)

链接:点击打开链接

题意:一个空行前的为字典,空行后的为查找的对象,问以空行后的单词为前缀的单词个数有几个

代码:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
const int siz=500005;
char s[15];
int rt,sum[siz],tr[siz][30];
void in(){
    int i,u=0;
    for(i=0;s[i];i++){
        if(tr[u][s[i]-'a']==0)
        tr[u][s[i]-'a']=++rt;
        u=tr[u][s[i]-'a'];
        sum[u]++;
    }                                           //每个节点记一下数
}
int get(){
    int i,u=0;
    for(i=0;s[i];i++){
        if(tr[u][s[i]-'a']==0)
        return 0;
        u=tr[u][s[i]-'a'];
    }
    return sum[u];
}
int main(){
    int i,j;
    memset(tr,0,sizeof(tr));
    memset(sum,0,sizeof(sum));
    rt=0;
    while(gets(s)&&strlen(s)>0)
    in();
    while(scanf("%s",s)!=EOF){
        printf("%d\n",get());
    }
    return 0;
}

 

 

 

你可能感兴趣的:(---------Trie树)