码迷,mamicode.com
首页 > 其他好文 > 详细

[Trie]JZOJ 5795 词典

时间:2018-08-10 22:59:58      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:com   agg   2pc   fbi   script   ATX   cpi   wadl   apn   

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\n",Search(s));
}

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

 

[Trie]JZOJ 5795 词典

标签:com   agg   2pc   fbi   script   ATX   cpi   wadl   apn   

原文地址:https://www.cnblogs.com/mastervan/p/9457316.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!