hdu 1251

来源:互联网 发布:淘宝数据魔方软件 编辑:程序博客网 时间:2024/06/05 17:18

题目

根据字符串来建n叉树,就是字典树

一般为26叉树,一般题目的关键在于建树时维护的其他值

线段树时以线段作为一个一个的子节点,是二叉树。

字典树即为n叉树。

水题一枚,代码如下:

#include<iostream>#include<cstring>#include<cstdio>using namespace std;struct Trie{    int flag;    Trie *next[26];};Trie *root;void buildTrie(char *str){    int len = strlen(str);    Trie *p=root,*q;    for(int i=0;i<len;i++){        int rt=str[i]-'a';        if(p->next[rt]==NULL){            q = new Trie;            q->flag=1;            for(int j=0;j<26;j++)               q->next[j]=NULL;            p->next[rt]=q;            p=p->next[rt];        }        else{            p->next[rt]->flag++;            p=p->next[rt];        }    }}int findTrie(char *str){    Trie *p=root;    int len=strlen(str);    for(int i=0;i<len;i++){        int rt=str[i]-'a';        p=p->next[rt];        if(p==NULL)           return 0;    }    return p->flag;}int main(){    char str[15];    int i;    root = new Trie;    for(i=0;i<26;i++)       root->next[i]=NULL;     while(gets(str) && str[0]!='\0')        buildTrie(str);     memset(str, 0, sizeof(str));      while(~scanf("%s", str) )    {        int ans = findTrie(str);        printf("%d\n", ans);    }    return 0;}


原创粉丝点击