• 统计难题 HDU


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

    注意:本题只有一组测试数据,处理到文件结束.
    Output对于每个提问,给出以该字符串为前缀的单词的数量.
    Sample Input

    banana
    band
    bee
    absolute
    acm
    
    ba
    b
    band
    abc

    Sample Output

    2
    3
    1
    0

    学习地址:
    http://blog.csdn.net/u013480600/article/details/44673031
    http://blog.csdn.net/hackbuteer1/article/details/7964147
     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstdio>
     4 #include<cstring>
     5 using namespace std;
     6 
     7 struct node{
     8     int num;
     9     node* next[26];
    10     node(){
    11         num=0;
    12         memset(next,0,sizeof(next));
    13     }
    14 };
    15 
    16 node* root=new node();
    17 node* rt;
    18 
    19 int id,len;
    20 
    21 void build(char str[30]){
    22     rt=root;
    23     len=strlen(str);
    24     for(int i=0;i<len;i++){
    25         id=str[i]-'a';
    26         if(rt->next[id]==NULL) rt->next[id]=new node();
    27         rt=rt->next[id];
    28         rt->num++;
    29     }
    30 }
    31 
    32 int querry(char str[30]){
    33     rt=root;
    34     len=strlen(str);
    35     for(int i=0;i<len;i++){
    36         id=str[i]-'a';
    37         if(rt->next[id]==NULL) return 0;
    38         rt=rt->next[id];
    39     }
    40     return rt->num;
    41 }
    42 
    43 int main()
    44 {   char str[30];
    45     while(gets(str)&&str[0]) build(str);
    46     while(gets(str)) printf("%d
    ",querry(str));
    47     return 0;
    48 }
  • 相关阅读:
    bzoj 2120 数颜色 带修改莫队
    luogu 2709 小B的询问 莫队
    bzoj 2002 [Hnoi2010]Bounce 弹飞绵羊 分块
    bzoj 4765 普通计算姬 dfs序 + 分块
    loj 数列分块入门 6 9(区间众数)
    loj 数列分块入门 5 7 8
    AtCoder Grand Contest 021 D
    Codeforces Round #466
    office 威胁检测
    修改macos的启动LOGO
  • 原文地址:https://www.cnblogs.com/zgglj-com/p/6852345.html
Copyright © 2020-2023  润新知