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 }
  • 相关阅读:
    WPF 中使用 Resource 实现多语言
    webapi入门 如何调用
    webapi入门2
    webapi 入门
    asp.net web page 中如何添加引用
    几个Is函数
    webGrid内容格式化
    Validation
    HTML FORM
    访问数据库
  • 原文地址:https://www.cnblogs.com/lilibuxiangtle/p/12241493.html
Copyright © 2011-2022 走看看