zoukankan      html  css  js  c++  java
  • Trie树的小应用——Chemist

    题意(自己编的):

    给你一篇文章,包含n个长度为Si的单词,然后给你m组询问,每次询问一个单词在这篇文章中作为单词前缀出现的次数。n <=10^6,m<=10^6,Si<=100。

    还是用字典树,在插入的时候记录每一个节点被访问的次数,在查找的时候用指针p找到当前单词,这个单词的最后一个字母到的节点所存的次数就是它作为前缀出现的次数。

    代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int M=1e6+2;
     4 char word[200];
     5 int n,m,trie[M][27],sum=1,tim[M];
     6 void insert(char a[])
     7 {
     8     int len=strlen(a),p=1;
     9     for(int i=0;i<len;i++)
    10     {
    11         int ch=a[i]-'a';
    12         if(trie[p][ch]==0)trie[p][ch]=++sum;
    13         p=trie[p][ch];
    14         //if(i!=len-1)//如果是严格前缀的话 
    15         tim[p]++;//tim数组记录每个节点被访问过的次数 
    16     }
    17 }
    18 int find(char a[])
    19 {
    20     int len=strlen(a),p=1;
    21     for(int i=0;i<len;i++)
    22     {
    23         int ch=a[i]-'a';
    24         p=trie[p][ch];
    25         if(p==0)return 0;
    26     } 
    27     return tim[p];
    28 }
    29 int main()
    30 {
    31     cin>>n>>m;
    32     for(int i=1;i<=n;i++)
    33     {
    34         cin>>word;
    35         insert(word);
    36     }
    37     for(int i=1;i<=m;i++)
    38     {
    39         cin>>word;
    40         printf("%d
    ",find(word));
    41     }
    42     return 0;
    43 }
    View Code
  • 相关阅读:
    mybatis-plus 插件
    mybatis-plus 逆向工程模板
    mybatis-plus 使用
    response.getWriter()
    String.length()和String.getBytes().length
    mybatis 中有趣的符号#与$
    html动画实现
    把我坑惨的一个update语句
    我们为什么不用 Select * 吗?
    Java 正则表达式
  • 原文地址:https://www.cnblogs.com/nopartyfoucaodong/p/9381939.html
Copyright © 2011-2022 走看看