LG2292 L语言
题意
给出\(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语言的更多相关文章
- BZOJ 1212: [HNOI2004]L语言 [AC自动机 DP]
1212: [HNOI2004]L语言 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1367 Solved: 598[Submit][Status ...
- 【BZOJ1212】[HNOI2004]L语言 Trie树
[BZOJ1212][HNOI2004]L语言 Description 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写字母构 ...
- BZOJ 1212: [HNOI2004]L语言( dp + trie )
因为单词很短...用trie然后每次dp暴力查找...用哈希+dp应该也是可以的.... ------------------------------------------------------- ...
- [HNOI2004]Language L语言
2777: [HNOI2004]Language L语言 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 10 Solved: 5[Submit][S ...
- 1212: [HNOI2004]L语言
1212: [HNOI2004]L语言 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 643 Solved: 252[Submit][Status] ...
- 【BZOJ1212】L语言(AC自动机)
[BZOJ1212]L语言(AC自动机) 题面 BZOJ 题解 很自然的,既然要匹配单词,那就全部都丢到\(AC\)自动机里面去 现在想想怎么匹配 先是\(AC\)自动机正常的匹配 如果此时这个位置能 ...
- BZOJ_1212_[HNOI2004]L语言_哈希
BZOJ_1212_[HNOI2004]L语言_哈希 Description 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写 ...
- 洛谷 P2292 [HNOI2004] L语言 解题报告
P2292 [HNOI2004] L语言 题目描述 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章\(T\)是由若干小写字母构成.一个单词 ...
- 洛谷:P2292 [HNOI2004]L语言(DP+Trie树)
P2292 [HNOI2004]L语言 题目链接:https://www.luogu.org/problemnew/show/P2292 题目描述 标点符号的出现晚于文字的出现,所以以前的语言都是没有 ...
随机推荐
- Beta 冲刺(2/7)
目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(2/7) 团队部分 后敬甲(组长) 过去两天完成了哪些任务 整理博客 做了点商家数据表格 接下来的计划 做 ...
- 【原创】大数据基础之Airflow(1)简介、安装、使用
airflow 1.10.0 官方:http://airflow.apache.org/ 一 简介 Airflow is a platform to programmatically author, ...
- Python-Django 视图层
1 request对象 method:请求方式 GET:get请求的参数(post请求,也可以携带参数) POST:post请求的参数(本质是从bdoy中取出来,放到里面了) COOKIES---&g ...
- 10分钟理解JS引擎的执行机制
首先,请牢记2点: (1) JS是单线程语言 (2) JS的Event Loop是JS的执行机制.深入了解JS的执行,就等于深入了解JS里的event loop 1.灵魂三问 (1) JS为什么是单线 ...
- ERROR: invalid byte sequence for encoding "UTF8": 0x00
1.使用kettle批量导入数据的时候,数据出现了下面的错误.ERROR: invalid byte sequence for encoding "UTF8": 0x00 关键点: ...
- LNMP一键安装包添加虚拟主机、删除虚拟主机及如何使用伪静态
本文主要介绍LNMP一键安装包添加虚拟主机.删除虚拟主机及如何使用伪静态. 一.添加虚拟主机通俗点就是在VPS/服务商上添加一个网站(域名). 需要执行如下命令:/root/vhost.sh 执行后会 ...
- Imcash平台测评报告
ImCash是由全球知名量子基金(QuantumFund)与美国好事达保险公司 (ALL ) 联合投资美国区块链金融资本(BFC)打造全球首款量子基金数字资产服务平台 . ImCash作为全球首款量子 ...
- webpack报错需要合适的loader
以前做vue项目都好好的,最近做react,公共配置感觉加个jsx就可以了吧,然而不是这样的. 一.问题描述 You may need an appropriate loader to handle ...
- 4.2模拟赛 wormhole(期望DP Dijkstra)
\(\color{white}{orzmjt又切题了...}\) \(Description\) 给定一张有向图,每条边在每一时刻有\(p_i\)的概率存在.求最优策略下从\(1\)走到\(n\)最少 ...
- 2017-11-4—模拟PID电路(参考ADN8834datasheet)
先贴几张datasheet原图: 这部分都很想了解,最想了解的是这四个zero point.pole point.pole point.zero point是怎么求出来的? 现在S域求出传函?(自动化 ...