zoukankan      html  css  js  c++  java
  • HDU1251(字典树)

    统计难题

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


    Problem Description

    Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).
     

    Input

    输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串.

    注意:本题只有一组测试数据,处理到文件结束.
     

    Output

    对于每个提问,给出以该字符串为前缀的单词的数量.
     

    Sample Input

    banana
    band
    bee
    absolute
    acm
     
    ba
    b
    band
    abc
     

    Sample Output

    2
    3
    1
    0
     

    Author

    Ignatius.L

    字典树。

    交G++不停MLE是什么鬼,交C++才AC。。。

     1 //2016.10.7
     2 #include <iostream>
     3 #include <cstdio>
     4 #include <cstdlib>
     5 #include <cstring>
     6 
     7 using namespace std;
     8 
     9 struct node//26叉树,num为到该节点截止的前缀有多少个
    10 {
    11     node* ch[26];
    12     int num;
    13     node(){
    14         num = 0;
    15         for(int i = 0; i < 26; i++)
    16               ch[i] = NULL;
    17     }
    18 };
    19 
    20 node *root = NULL;
    21 char s[15];
    22 
    23 void Insert(char *s)
    24 {
    25     node* cur = root;
    26     cur->num++;
    27     for(int i = 0; i < strlen(s); i++)
    28     {
    29         int tmp = s[i]-'a';
    30         if(cur->ch[tmp] == NULL)
    31               cur->ch[tmp] = new node;
    32         cur = cur->ch[tmp];
    33         cur->num++;
    34     }
    35 }
    36 
    37 int query(char *s)
    38 {
    39     node *cur = root;
    40     for(int i = 0; i < strlen(s); i++)
    41     {
    42         int tmp = s[i]-'a';
    43         if(cur->ch[tmp] == NULL)return 0;
    44         cur = cur->ch[tmp];
    45     }
    46     return cur->num;
    47 }
    48 
    49 int main()
    50 {
    51     root = new node;
    52     while(gets(s), strcmp(s, "")){
    53         Insert(s);
    54     }
    55     while(scanf("%s", s)!=EOF){
    56         printf("%d
    ", query(s));
    57     }
    58 
    59     return 0;
    60 }
  • 相关阅读:
    树莓派4B
    第一个实验-LED灯闪烁
    GPIO
    新建库函数模板
    开发环境搭建
    博弈论
    区间dp
    字典树
    快速排序
    MarkDown
  • 原文地址:https://www.cnblogs.com/Penn000/p/5936223.html
Copyright © 2011-2022 走看看