zoukankan      html  css  js  c++  java
  • hdu1251字典树递归算法

    统计难题

    Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others) Total Submission(s): 13831    Accepted Submission(s): 5938

    Problem Description
    Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也
    是自己的前缀).
     
    Input
    输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一
    连串的提问,每行一个提问,每个提问都是一个字符串.
    注意:本题只有一组测试数据,处理到文件结束.
     
    Output
    对于每个提问,给出以该字符串为前缀的单词的数量.
     
    Sample Input
    banana
    band
    bee
    absolute
    acm
     
    ba
    b
    band
    abc
     
    Sample Output
    2
    3
    1
    0

    字典树递归算法:

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <algorithm>
     4 #include <string.h>
     5 #include <math.h>
     6 #include <vector>
     7 #include <stack>
     8 #include <map>
     9 using namespace std;
    10 #define ll long long int
    11 #define INF 5100000
    12 typedef struct node
    13 {
    14     struct node *next[26];
    15     int n;
    16 }trie;
    17 trie *inti()
    18 {
    19     trie *t;
    20     t=(trie *)malloc(sizeof(trie));
    21     t->n=0;
    22     for(int i=0;i<26;i++) t->next[i]=NULL;
    23     return t;
    24 }
    25 void insert(trie *t,char a[])
    26 {
    27     t->n++;
    28     if(*a=='')return ;
    29     if(!t->next[*a-'a'])t->next[*a-'a']=inti();
    30     insert(t->next[*a-'a'],a+1);
    31 }
    32 int query(trie *t,char a[])
    33 {
    34     if(*a==0) return t->n;
    35     if(!t->next[*a-'a']) return 0;/*指针为空,未查找到*/
    36     return query(t->next[*a-'a'],a+1);
    37 }
    38 
    39 int main()
    40 {
    41     trie *t;
    42     t=inti();
    43     char x;
    44     x=getchar();
    45     char a[100];
    46     int r=0;
    47     while(x!='
    ')
    48     {
    49         while(x!='
    ')
    50         {
    51             a[r++]=x;
    52             x=getchar();
    53         }
    54         a[r++]='';
    55         insert(t,a);
    56         x=getchar();
    57         r=0;
    58     }
    59    while(scanf("%s",a)!=EOF)
    60    {
    61        cout<<query(t,a)<<endl;
    62    }
    63 }
    View Code
  • 相关阅读:
    发送信号控制 nginx
    常用技术搜索关键字
    boost helloworlld
    快速认识boost 数据类型转换
    php helloworld
    标准模板库(STL)学习指南之List容器
    c 可变参数 可变 形参 不确定 (2)
    C宏——智者的利刃,愚者的恶梦!
    boost常用库案例
    c++ 模板
  • 原文地址:https://www.cnblogs.com/ERKE/p/3258918.html
Copyright © 2011-2022 走看看