zoukankan      html  css  js  c++  java
  • HDU-1251 统计难题

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

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

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

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

    Sample Input
    banana band bee absolute acm ba b band abc
     

    Sample Output
    2 3 1 0

    解题思路:

    字典树模板题,直接搞就行

    代码:

    #include <cstdio>
    #include <cstring>
    using namespace std;
    
    typedef struct node{
        int num;
        node *next[26];
    }Trie;
    
    Trie *init(Trie *rt){
        rt -> num = 0;
        for(int i = 0; i < 26; ++i) rt -> next[i] = NULL;
        return rt;
    }
    Trie *createTrie(Trie *rt, char *s){
        Trie *p = rt;
        int v, len = strlen(s);
        for(int i = 0; i < len; ++i){
            v = s[i] - 'a';
            if(p -> next[v] == NULL){
                p -> next[v] = new Trie;
                p = p -> next[v];
                p = init(p);
                p -> num = 1;
            }else{
                p = p -> next[v];
                p -> num += 1;
            }
        }
        return rt;
    }
    int getNum(Trie *rt, char *s){
        Trie *p = rt;
        int v, len = strlen(s);
        for(int i = 0; i < len; ++i){
            v = s[i] - 'a';
            if(p -> next[v] == NULL) return 0;
            else p = p -> next[v];
        }
        return p -> num;
    }
    void clearTrie(Trie *t){
        if(t == NULL) return;
        for(int i = 0; i < 26; ++i){
            clearTrie(t -> next[i]);
        }
        delete t;
    }
    int main(){
        Trie *t; t = new Trie; t = init(t);
        char str[12] = {0};
        while(gets(str) != NULL){
            int len = strlen(str);
            if(len == 0) break;
            t = createTrie(t, str);
        }
        while(gets(str) != NULL){
            printf("%d
    ", getNum(t, str));
        }
        clearTrie(t);
        return 0;
    }


  • 相关阅读:
    《程序员修炼之道》阅读笔记2
    《程序员修炼之道》阅读笔记1
    Ubuntu16桥接模式上网并设置静态ip
    读《架构漫谈》有感
    质量属性6个常见属性的场景分析
    sql注水
    python版本切换
    使用vue-cli构建 webpack打包工具时,生产环境下,每次build时,删除dist目录,并重新生成,以防dist目录文件越来越多。
    Java栈与堆
    从一个字符串s的第i个字符(不包括此字符)开始删除n个字符
  • 原文地址:https://www.cnblogs.com/wiklvrain/p/8179415.html
Copyright © 2011-2022 走看看