题意

给出\(n\)个单词,再给出\(m\)段无符号的文章,询问每段文章能最长匹配的前缀。

思路

设\(f[i]\)为前缀\([1,i]\)能否被匹配,对于一个可以匹配完的节点\(i\),若有\([i+1,j]\)此个单词,那么\(f[j]\)也为真。可以将模式串插入到一个\(Trie\)中,然后在\(Trie\)中查找。而事实上,对于每一个\(i\),不需要枚举\(j\)再验证是否匹配,只需要沿\(i+1\)、\(i+2\)……在\(Trie\)树上跑一次,然后每遇到一个单词结尾就转移一个\(j\),这样子就很快了

#include <bits/stdc++.h>
int trie[1000005][26],val[1000005],f[1000005],cnt,n,m;
char s[1000005],word[1000005];
void insert(){
int u=0,l=strlen(word+1);
for (int i=1;i<=l;i++){
if (!trie[u][word[i]-'a']) trie[u][word[i]-'a']=++cnt;
u=trie[u][word[i]-'a'];
}
val[u]=1;
}
void solve(){
int u=0,l=strlen(word+1);
memset(f,0,sizeof(f));
f[0]=1;
for (int i=1;i<=l;i++)
if (f[i-1]){
int j=i,u=trie[0][word[i]-'a'];
while (u && j<=l){
if (val[u]) f[j]=1;
u=trie[u][word[++j]-'a'];
}
}
for (int i=l;i>=0;i--)
if (f[i]){
printf("%d\n",i);
return;
}
}
int main(){
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++){
scanf("%s",word+1);
insert();
}
for (int i=1;i<=m;i++){
scanf("%s",word+1);
solve();
}
return 0;
}

LG2292 L语言的更多相关文章

  1. BZOJ 1212: [HNOI2004]L语言 [AC自动机 DP]

    1212: [HNOI2004]L语言 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1367  Solved: 598[Submit][Status ...

  2. 【BZOJ1212】[HNOI2004]L语言 Trie树

    [BZOJ1212][HNOI2004]L语言 Description 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写字母构 ...

  3. BZOJ 1212: [HNOI2004]L语言( dp + trie )

    因为单词很短...用trie然后每次dp暴力查找...用哈希+dp应该也是可以的.... ------------------------------------------------------- ...

  4. [HNOI2004]Language L语言

    2777: [HNOI2004]Language L语言 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 10  Solved: 5[Submit][S ...

  5. 1212: [HNOI2004]L语言

    1212: [HNOI2004]L语言 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 643  Solved: 252[Submit][Status] ...

  6. 【BZOJ1212】L语言(AC自动机)

    [BZOJ1212]L语言(AC自动机) 题面 BZOJ 题解 很自然的,既然要匹配单词,那就全部都丢到\(AC\)自动机里面去 现在想想怎么匹配 先是\(AC\)自动机正常的匹配 如果此时这个位置能 ...

  7. BZOJ_1212_[HNOI2004]L语言_哈希

    BZOJ_1212_[HNOI2004]L语言_哈希 Description 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写 ...

  8. 洛谷 P2292 [HNOI2004] L语言 解题报告

    P2292 [HNOI2004] L语言 题目描述 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章\(T\)是由若干小写字母构成.一个单词 ...

  9. 洛谷:P2292 [HNOI2004]L语言(DP+Trie树)

    P2292 [HNOI2004]L语言 题目链接:https://www.luogu.org/problemnew/show/P2292 题目描述 标点符号的出现晚于文字的出现,所以以前的语言都是没有 ...

随机推荐

  1. 【原创】大叔案例分享(3)用户行为分析--见证scala的强大

    一 场景分析 用户行为分析应用的场景很多,像线上网站访问统计,线下客流分析(比如图像人脸识别.wifi探针等),比较核心的指标有几个: PV | UV | SD | SC 指标说明: PV(Page ...

  2. iOS -- Effective Objective-C 阅读笔记 (8)

    若想令自己缩写的对象具有拷贝功能, 则需要实现 NSCopying 协议, 如果自定义的对象分为可变版本与不可变版本, 那么就要同时实现 NSCopying 协议和 NSMutableCopying ...

  3. git remote: HTTP Basic: Access denied Mac 使用Sourcetree 密码输错 再次输入解决方案

    删除下面的key即可

  4. Python学习笔记十

    守护进程 p.daemon=True 必须在p.start()之前设置. 守护进程内不能再开子进程. 在主进程中开启守护进程(就是一个子进程) 什么时候应该把子进程设置为守护进程? 开子进程的目的:就 ...

  5. ubuntu的磁盘扩容

    前言:以前项目的人给ubuntu虚拟机分配磁盘空间走的默认,导致后期/根和swap空间跟不上需求,需要扩容 流程如下: 1.先添加块硬盘,命令行输入fdisk -l,会发现多了个/dev/sdb(vd ...

  6. python设计模式---结构型之门面模式

    门面,系统,客户端~ from django.test import TestCase class Hotelier: def __init__(self): print('Arranging the ...

  7. Sicily T-primes

    DescriptionWe know that prime numbers are positive integers that have exactly two distinct positive  ...

  8. 关于python3.6上传文件时报错:HTTPSConnectionPool(host='***.org', port=443): Max retries exceeded with url: /post (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAIL解决办法

    第一个报错: 最近在练习post请求中上传文件时遇到了一个奇葩事情,两台电脑上写了一模一样的代码,一个运行正常,另一个一片红. 最后了解了一下原因以及解决办法.先记录下关键代码: files = {& ...

  9. Codeforces 375B Maximum Submatrix 2 (DP)

    <题目链接> 题目大意:给出一个01矩阵,行与行之间可以互换位置,问能够得到最大的全1矩阵的面积. #include <bits/stdc++.h> using namespa ...

  10. Python-Django学习

    1,安装Django与python版本的对应1.8 2.7,3.2--3.51.9,1.10 2.7,3.4,3.51.11 2.7,3.4,3.5,3.62.0 2.1 第一种安装:pip inst ...