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;
    }


  • 相关阅读:
    VMware的安装
    草根创业专题开篇
    转:分布式和集中式版本控制工具svn,git,mercurial
    sql db to sqlite
    简单办公自动化系统开发与思考1
    sql ef datacontext muti thread problem
    谈云计算,服务器运算的惊天骗局
    ios5.1二货,手贱,解决方案
    阿曹的创业点子1人人快递
    创业点子wifi anywhere
  • 原文地址:https://www.cnblogs.com/wiklvrain/p/8179415.html
Copyright © 2011-2022 走看看