洛谷.2292.[HNOI2004]L语言(Trie DP)
/*
简单的DP,查找是否有字典中的单词时在Trie树上做
要注意在最初Match(0)一遍后,i还是要从0开始匹配,因为如果有长度为1的单词,Match(i+1)不会从1更新
1M=1024K=1024*1024B
*/
#include<cstdio>
#include<cstring>
const int N=1025*1025,M=220,S=28;
int n,m,tot,son[M][S],qu[M],qid[M];
bool dp[N],vis[M];
char s[N];
void Insert()
{
int l=strlen(s),u=0,id;
for(int i=0;i<l;++i)
{
id=s[i]-'a';
if(!son[u][id]) son[u][id]=++tot;
u=son[u][id];
}
vis[u]=1;
}
bool Match(int p)
{
int id,id2,u,h=0,t=1;
qu[0]=0,qid[0]=p;
while(h<t)
{
u=qu[h], id=s[qid[h]]-'a', id2=qid[h++];
// printf(" %d:\t u:%d id:%c i:%d\n",p,u,id+'a',id2);
// if(dp[id2]) continue;//不要有这个!dp与当前的u和id都有关
if(!son[u][id]) continue;
u=son[u][id];
if(vis[u]) dp[id2]=1;
// printf("dp:%d\n",dp[id2]);
qu[t]=u, qid[t++]=id2+1;
}
}
int main()
{
// freopen("language.in","r",stdin);
// freopen("language.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)
scanf("%s",s),Insert();
for(int i=1;i<=m;++i)
{
scanf("%s",s);
int l=strlen(s);
memset(dp,0,sizeof dp);
// dp[0]=1;
int ans=0;
Match(0);
for(int j=0;j<l;++j)
if(dp[j]) ans=j+1, Match(j+1);//这是j+1...注意条件也不要设成j<l-1
printf("%d\n",ans);
}
return 0;
}
洛谷.2292.[HNOI2004]L语言(Trie DP)的更多相关文章
- Luogu P2292 [HNOI2004]L语言(Trie+dp)
P2292 [HNOI2004]L语言 题面 题目描述 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章 \(T\) 是由若干小写字母构成. ...
- 洛谷 P2292 [HNOI2004] L语言 解题报告
P2292 [HNOI2004] L语言 题目描述 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章\(T\)是由若干小写字母构成.一个单词 ...
- 洛谷P2292 [HNOI2004]L语言
传送门 建好trie树 当$dp[j]==1$当且仅当存在$dp[k]=1$且$T[k+1,j]==word[i]$ 然后乱搞就行了 //minamoto #include<iostream&g ...
- 洛谷 P2292 [HNOI2004]L语言
题目描述 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写字母构成.一个单词W也是由若干小写字母构成.一个字典D是若干个单词的 ...
- 洛谷:P2292 [HNOI2004]L语言(DP+Trie树)
P2292 [HNOI2004]L语言 题目链接:https://www.luogu.org/problemnew/show/P2292 题目描述 标点符号的出现晚于文字的出现,所以以前的语言都是没有 ...
- 【BZOJ1212】[HNOI2004]L语言 Trie树
[BZOJ1212][HNOI2004]L语言 Description 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写字母构 ...
- BZOJ1212[HNOI2004]L语言——trie树+DP
题目描述 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写字母构成.一个单词W也是由若干小写字母构成.一个字典D是若干个单词的 ...
- [HNOI2004][bzoj1212] L语言 [Trie+dp]
题面 传送门 思路 无后效性 显然,不管某个前缀的理解方式是怎么样的,如果它能被理解,那么前面的决策对于后面的决策而言都是等价的 因此这题可以DP DP方程 令$dp[i]$表示前缀i是否能被理解 那 ...
- BZOJ1212: [HNOI2004]L语言(Trie图+DP)
Description 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写字母构成.一个单词W也是由若干小写字母构成.一个字典D ...
随机推荐
- Python3学习笔记21-实例属性和类属性
由于Python是动态语言,根据类创建的实例可以任意绑定属性. 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Student(object): def __init__(se ...
- nginx报错:403 Forbidden 并且访问首页index.php是下载文件的状态
nginx报错:403 Forbidden 并且访问首页index.php是下载文件的状态,不能正常解析php 系统有其他两个站访问是正常的 看日志没有看到明显的错误 搜索了下: 答案如下: php的 ...
- mybatis和spring整合的关键配置
spring配置文件 applicationContext.xml: <beans xmlns="http://www.springframework.org/schema/beans ...
- centos6中iptables单机网络防火墙的使用
概述: iptables:基于软件的形式实现的一种防火墙的软件程序 Firewall:工作在主机或网络边缘,对进出的报文按事先定义的规则进行检查,并且由匹配到的规则进行处理的一组硬件或软件,甚至可能是 ...
- servlet请求中的信息
在servlet中HttpServeltRequest中有一个方法getRequestURL() 假如我们平常输入的地址是:localhost/Demo1/TestServlet?hello=worl ...
- PC上图标显示异常 白色框框处理方案
步骤如下: 1.打开360安全卫士,点击图标显示异常的立即修复 2.修复完,图标就正常了 3.分析原因: 可能是我用了魔方优化大师(TweakerCube)优化了桌面快捷方式(去掉箭头)引起的,而且是 ...
- 微服务(Microservices )简介
概念 微服务架构风格是一种将单个应用程序作为一套小型服务开发的方法,每种应用程序都在自己的进程中运行, 并与轻量级机制(通常是HTTP资源API)进行通信. 这些服务是围绕业务功能构建的,可以通过全自 ...
- JFreeChart入门
JFreeChart主要用来各种各样的图表,这些图表包括:饼图.柱状图(普通柱状图以及堆栈柱状图).线图.区域图.分布图.混合图.甘特图以及一些仪表盘等等 (源代码下载) 示例程序运用的jar包: j ...
- windows下sublime通过sftp扩展上传文件到linux服务器上
首先在package controll下载sftp扩展,在任意磁盘下新建文件夹: 然后,添加该文件夹到sublime中,并在xhell中链接linux服务器,新建目录,mkdir /home/hel ...
- POJ 1631 Bridging signals (LIS:最长上升子序列)
题意:给你一个长为n(n<=40000)的整数序列, 要你求出该序列的最长上升子序列LIS. 思路:要求(nlogn)解法 令g[i]==x表示当前遍历到的长度为i的所有最长上升子序列中的最小序 ...