• hdu1247 字典树模板


    今天又接触了一个树:字典树。

    给出结构图。

    其优点:节约储存空间,提高查询效率。

    其主要函数用法Insert();插入结点,用到了指针,总感觉指针用在表示前后缀这种关系上是最清晰的了。先把这份模拟别人写的代码写下当作模板!以后有时间再继续做几道字典树的题。

    代码:

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    char str[50010][20];
    struct Tree{
        int num;
        Tree *next[26];
        Tree()
        {
            num=0;
            for(int i=0;i<26;i++)
            {
                next[i]=NULL;
            }
        }
    }* root;
    int count;
    void insert(Tree *p,char *s)
    {
        int i=0;
        while(s[i])
        {
            int x=s[i]-'a';
            if(p->next[x]==NULL)
                p->next[x]=new Tree();
            p=p->next[x];
            i++;
        }
        p->num++;
    }
    int find(Tree *p,char *s)
    {
        int i=0,ans=0;
        while(s[i])
        {
            int n=s[i]-'a';
            if(p->next[n])
            {
                p=p->next[n];
                ans=p->num;
                i++;
            }
            else return 0;
        }
        return ans;
    }
    int main()
    {
        count=0;
        root=new Tree();
        while(cin>>str[count++])
        {
            insert(root,str[count-1]);
        }
        for(int i=0;i<count;i++)//暴力搜索count个单词
        {
            int len=strlen(str[i]);
            int flag=0;
            for(int j=0;j<len;j++)
            {
                char  a[20],b[20];
                memset(a,'\0',sizeof(a));
                memset(b,'\0',sizeof(b));
                int cnt1=0;int cnt2=0;
                for(int k=0;k<j;k++)
                {
                    a[cnt1++]=str[i][k];
                }
                for(int k=j;k<len;k++)
                {
                    b[cnt2++]=str[i][k];
                }
                if(find(root,a)&&find(root,b))
                {
                    flag=1;
                    break;
                }
            }
            if(flag)puts(str[i]);
        }
        return 0;
    }
    



     

  • 相关阅读:
    [SDOI 2009] 晨跑
    [ZJOI 2009] 假期的宿舍
    [BZOJ 2006] 狼抓兔子
    [BZOJ 1691] 挑剔的美食家
    [HNOI 2015] 菜肴制作
    [Codeforces 489E] Nastya and King-Shamans
    sum(sum(abs(y))) 中 sum(sum())什么意思?
    matlab 函数 bwarea
    系统启动挂载根文件系统时Kernel panic
    rmmod: chdir(/lib/modules): No such file or directory
  • 原文地址:https://www.cnblogs.com/amourjun/p/5134193.html
Copyright © 2020-2023  润新知