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


  • 相关阅读:
    Oracle基础知识整理
    linux下yum安装redis以及使用
    mybatis 学习四 源码分析 mybatis如何执行的一条sql
    mybatis 学习三 mapper xml 配置信息
    mybatis 学习二 conf xml 配置信息
    mybatis 学习一 总体概述
    oracle sql 语句 示例
    jdbc 新认识
    eclipse tomcat 无法加载导入的web项目,There are no resources that can be added or removed from the server. .
    一些常用算法(持续更新)
  • 原文地址:https://www.cnblogs.com/wiklvrain/p/8179415.html
Copyright © 2011-2022 走看看