• 统计难题(字典树)


    统计难题

    Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)
    Total Submission(s): 39360    Accepted Submission(s): 14317


    Problem Description
    Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).
     
    Input
    输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串.

    注意:本题只有一组测试数据,处理到文件结束.
     
    Output
    对于每个提问,给出以该字符串为前缀的单词的数量.
     
    Sample Input
    banana band bee absolute acm ba b band abc
     
    Sample Output
    2 3 1 0
     

     AC代码

    #include <cstdio>  
    #include <cstring>  
    #include <algorithm>  
    using namespace std;  
    const int maxn = 1e6+10;  
    int trie[maxn][40];  
    int val[maxn],temp;  
    char str[maxn];  
      
      
    void insert(char *s)  
    {  
        int len=strlen(s);  
        int u=0;  
        for(int i=0;i<len;++i)  
        {  
            int c=s[i]-'a';  
            if(!trie[u][c])  
            {  
                memset(trie[temp],0,sizeof(trie[temp]));  
                trie[u][c]=temp++;  
            }  
            u=trie[u][c];  
            val[u]++;  
        }  
    }  
      
    int find(char *s)  
    {  
        int len=strlen(s);  
        int u=0;  
        for(int i=0;i<len;++i)  
        {  
            int c=str[i]-'a';  
            if(!trie[u][c])  
                return 0;  
            u=trie[u][c];  
        }  
        return val[u];  
    }  
      
    int main()  
    {  
        temp=1;  
        memset(trie[0],0,sizeof(trie[0]));  
        memset(val,0,sizeof(val));  
        while(gets(str),str[0])  
        {  
            insert(str);  
        }  
        while(scanf("%s",str)!=EOF)  
        {  
            printf("%d
    ",find(str));  
        }  
        return 0;  
    }  
    

      

    加油

    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    桟错误分析方法
    gstreamer调试命令
    sqlite的事务和锁,很透彻的讲解 【转】
    严重: Exception starting filter struts2 java.lang.NullPointerException (转载)
    eclipse 快捷键
    POJ 1099 Square Ice
    HDU 1013 Digital Roots
    HDU 1087 Super Jumping! Jumping! Jumping!(动态规划)
    HDU 1159 Common Subsequence
    HDU 1069 Monkey and Banana(动态规划)
  • 原文地址:https://www.cnblogs.com/h-hkai/p/7638885.html
Copyright © 2020-2023  润新知