zoukankan      html  css  js  c++  java
  • hdu 1251 前缀树

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251

        普通trie树,只是在构建的时候统计出每个节点儿子的个数,最后直接匹配每个前缀,输出最后一个前缀字符在树中儿子的个数加一(其本身)即可。

        纠结的是题目没给数据范围,tree数组开100010 RE,开200010 还是RE,一狠心开了500010,果断AC。。。

    代码:

     

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std ;
    int num ;
    int ans ;
    struct node{
        int n ;
        int next[30] ;
        void init(){
            memset(next,0,sizeof(next)) ;
            n=0 ;
        }
    }tree[500010] ;

    void insert(char a[]){
        int index=0 ;
        int len=strlen(a) ;
        for(int i=0;i<len;i++){
            if(tree[index].next[a[i]-'a']==0){
                tree[++num].init() ;
                tree[index].next[a[i]-'a']=num ;
                index=num ;
                tree[index].n=1 ;  //新节点没有儿子,但其本身也为本身的前缀
            }
            else{
                index=tree[index].next[a[i]-'a'] ;
                tree[index].n ++ ; //每匹配一个字符,儿子个数增一
            }
        }
    }
    int find(char a[]){
        int index=0 ;
        int len=strlen(a) ;
        if(len==0)  return 0 ;
        for(int i=0; i<len; i++){
            if(tree[index].next[a[i]-'a']==0)
                return 0 ;
            else
                index=tree[index].next[a[i]-'a'] ;
        }
        return tree[index].n ;
    }
    int main(){
        char str[15] ;
        int t=0 ;
        tree[0].init() ;
        num = 0 ;
        ans = 0 ;
        while(gets(str),strcmp(str,"")!=0)      //获取以空行区分的字符串
            insert(str) ;
        while(scanf("%s", str)!=EOF)
            cout << find(str) << endl ;
        return 0 ;
    }
  • 相关阅读:
    入门教程: JS认证和WebAPI
    ASP.NET Core 之 Identity 入门(二)
    在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序
    .Net Core+Angular Cli/Angular4开发环境搭建教程
    简单易用的.NET免费开源RabbitMQ操作组件EasyNetQ解析
    Razor
    一个简易的反射类库NMSReflector
    发布 Ionic iOS 企业级应用
    AngularJS中的Provider们:Service和Factory等的区别
    Linux企业运维人员必备150个命令汇总
  • 原文地址:https://www.cnblogs.com/xiaolongchase/p/2210729.html
Copyright © 2011-2022 走看看