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
     
    题解:简单的字典树,建树的时候用color数组标记每个前缀出现了多少次,查询的时候只要看color就行;输入空行开始查询可以用gets() 实现,读入字符串然后判断长度是否为0;
     
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 char a[100];
     5 int tree[400100][30];
     6 int color[400100];
     7 int k=1;
     8 
     9 void insert()
    10 {
    11     int p=0;
    12     int len=strlen(a);
    13     for(int i=0;i<len;i++){
    14         int c=a[i]-'a';
    15         if(!tree[p][c]) {
    16             tree[p][c]=k;
    17             k++;
    18         }
    19         p=tree[p][c];
    20         color[p]++;
    21     }
    22 }
    23 
    24 int query()
    25 {
    26     int p=0;
    27     int len=strlen(a);
    28     for(int i=0;i<len;i++){
    29         int c=a[i]-'a';
    30         if(!tree[p][c]) return 0;
    31         p=tree[p][c];
    32     }
    33     return color[p];
    34 }
    35 
    36 int main()
    37 {
    38     while(gets(a)){
    39         if(strlen(a)==0) break;
    40         insert();
    41     }
    42     while(gets(a)){
    43         if(strlen(a)==0) break;
    44         printf("%d
    ",query());
    45     }
    46     return 0;
    47 }
  • 相关阅读:
    javascript教程系列-10.DOM(下)
    javascript教程系列-9.DOM(上)
    javascript教程系列-8.BOM
    javascript教程系列-7.Date对象
    javascript教程系列-6.String类型
    javascript教程系列-5.数组
    Python字符串、元组、列表、字典互相转换的方法
    python 中函数
    python中的字符串 列表 字典
    python 基础 知识
  • 原文地址:https://www.cnblogs.com/lilibuxiangtle/p/12241493.html
Copyright © 2011-2022 走看看