zoukankan      html  css  js  c++  java
  • HDU1251 统计难题

    描述

    传送门:我是传送门

    Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).

    输入

    输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串. 注意:本题只有一组测试数据,处理到文件结束.

    输出

    对于每个提问,给出以该字符串为前缀的单词的数量.

    样例

    输入

    banana
    band
    bee
    absolute
    acm

    ba
    b
    band
    abc

    输出

    2
    3
    1
    0

    思路

    • 字典树模板题
    • s[0]==0s[0]==0来判断输入是否遇到空行

    代码

     1 /*
     2  * =========================================================================
     3  *
     4  *       Filename:  hdu1251.cpp
     5  *
     6  *           Link:  http://acm.hdu.edu.cn/showproblem.php?pid=1251
     7  *
     8  *        Version:  1.0
     9  *        Created:  2018/08/29 11时40分08秒
    10  *       Revision:  none
    11  *       Compiler:  g++
    12  *
    13  *         Author:  杜宁元 (https://duny31030.top/), duny31030@126.com
    14  *   Organization:  QLU_浪在ACM
    15  *
    16  * =========================================================================
    17  */
    18 #include <bits/stdc++.h>
    19 using namespace std;
    20 #define clr(a, x) memset(a, x, sizeof(a))
    21 #define rep(i,a,n) for(int i=a;i<=n;i++)
    22 #define pre(i,a,n) for(int i=a;i>=n;i--)
    23 #define ll long long
    24 #define max3(a,b,c) fmax(a,fmax(b,c))
    25 #define ios ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    26 const double eps = 1e-6;
    27 const int INF = 0x3f3f3f3f;
    28 const int mod = 1e9 + 7;
    29 const int N = 1000010;
    30 struct node
    31 {
    32     int next[27];
    33 }trie[N];
    34 int num[N];   // 以某一字符串为前缀的单词的数量
    35 int tot = 1;
    36 char s[20];
    37 void add(char a[])
    38 {
    39     int i,now = 0;
    40     int len = strlen(a);
    41     for(i = 0;i < len;i++)
    42     {
    43         int tmp = a[i]-'a'+1;
    44         int next = trie[now].next[tmp];
    45         if(!next)   // 如果对应字符还没有值
    46             trie[now].next[tmp] = tot++;
    47         now = trie[now].next[tmp];
    48         num[now]++;
    49     }
    50 }
    51 
    52 int query(char a[])
    53 {
    54     int len = strlen(a);
    55     int now = 0,i;
    56     for(i = 0;i < len;i++)
    57     {
    58         int tmp = a[i]-'a'+1;
    59         if(trie[now].next[tmp] == 0)
    60             return 0;
    61         now = trie[now].next[tmp];
    62     }
    63     return num[now];
    64 }
    65 
    66 int main()
    67 {
    68     ios
    69 #ifdef ONLINE_JUDGE 
    70 #else 
    71         freopen("in.txt","r",stdin);
    72     // freopen("out.txt","w",stdout); 
    73 #endif
    74     while(gets(s))
    75     {
    76         if(!s[0])
    77             break;
    78         add(s);
    79     }
    80     while(gets(s))
    81     {
    82         printf("%d
    ",query(s));
    83     }
    84     fclose(stdin);
    85     // fclose(stdout);
    86     return 0;
    87 }
  • 相关阅读:
    转:哈希加密
    转: 基础哈希介绍
    ASP.NET MVC-URL路由
    Nhibnate之CreateQuery和CreateSqlQuery查询
    NHibernate.HibernateException:“Unable to locate persister for the entity named 'Domain.Entity.LeaseUser'.
    async/await中的promise返回错误reject
    python txt文件常用读写操作
    Python 第三方日志框架loguru使用
    pycharm常用设置与常用快捷键
    jmeter正则表达式
  • 原文地址:https://www.cnblogs.com/duny31030/p/14304363.html
Copyright © 2011-2022 走看看