[Trie]JZOJ 5795 词典

Posted mastervan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Trie]JZOJ 5795 词典相关的知识,希望对你有一定的参考价值。

Description

技术分享图片
 

Input

第一行两个数n,m,表示有n个字符串,m个询问。
接下来n行,每行一个字符串Ti 。
再接下来m行,每行一个字符串Si 。

Output

对于每个询问,输出一个ansi表示答案。
 

Sample Input

3 2
abcabc
aabc
abbc
aa
ba  

Sample Output

1
3 
 

Data Constraint

技术分享图片

分析

暴力建trie,用一个last和mx数组记录答案,暴力遍历字典树输出即可

技术分享图片
#include <fstream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
int c[5000002][3],last[5000002],mlen[5000002];
int cnt=1,rt=1;
int n,m;

void Build(int num,string s) {
    int len=s.length(),x=rt;
    for (int i=0;i<len;i++) {
        if (!c[x][s[i]-a]) x=c[x][s[i]-a]=++cnt;
        else x=c[x][s[i]-a],mlen[x]=max(mlen[x],num-last[x]-1);
        last[x]=num;
    }
}

int Search(string s) {
    int len=s.length(),x=rt;
    for (int i=0;i<len;i++)
    if (!(x=c[x][s[i]-a])) return n;
    return mlen[x]=max(mlen[x],n-last[x]);
}

void Solve() {
    ifstream fin("word.in");
    fin>>n>>m;
    string s;
    for (int i=1;i<=n;i++)
    fin>>s,Build(i,s);
    for (int i=1;i<=m;i++)
    fin>>s,printf("%d
",Search(s));
}

int main() {
    freopen("word.out","w",stdout);
    Solve();
    fclose(stdout);
}
View Code

 



以上是关于[Trie]JZOJ 5795 词典的主要内容,如果未能解决你的问题,请参考以下文章

Java Trie(词典树)实现

leetcode打卡--数据结构设计-添加于搜索单词(字典树--Trie)

#1014 : Trie树

hihoCoder 1014 Trie树 (Trie)

HiHo1014 : Trie树(Trie树模板题)

hihoCoder 1014 Trie树