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


  • 相关阅读:
    perl 监控网站域名劫持
    OpenLayers访问Geoserver发布的地图
    基于OpenLayers的地图封装Javascript类定义
    Linux_正则表达式
    Linux_正则表达式
    帆软出品: 7点搞定制药企业数据分析系统开发需求
    帆软出品: 7点搞定制药企业数据分析系统开发需求
    Geoserver地图样式SLD资料收集
    GeoServer地图开发解决方案:地图数据处理篇
    Geoserver发布shapfile,中文字段乱码问题
  • 原文地址:https://www.cnblogs.com/wiklvrain/p/8179415.html
Copyright © 2011-2022 走看看