题目描述

令f[i]表示文章的1~i是否能够由单词构成,那么f[i]=f[j]&&OKj+1,i

其中OKj+1,i表示j+1到i能够由单词构成。

显然不能直接转移,考虑怎样快速算出OK来.

我们注意到每个单词不超过20,且数量不超过10,那么我们可以建一颗Trie树,插入这些单词。

然后顺序枚举每一位,如果某一位i可行,那么考虑它对后面位的影响(即刷表法)。

因为树的深度最多为10,每次最坏O(10)的检索,总复杂度O(20*10*1e6),但是还是很快。

#include<bits/stdc++.h>
#define RG register
#define IL inline
#define LL long long
using namespace std;IL int gi() {RG int x=0,w=0; char ch=0;while (ch<'0'||ch>'9') {if (ch=='-') w=1;ch=getchar();}while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+(ch^48),ch=getchar();return w?-x:x;
}const int N=30;
const int M=1100000;char str[21],s[M];
int n,m,L,num,f[M],tr[210][27],End[210];IL void Insert(char *s) {int i,p=0,now,len=strlen(s);for (i=0;i<len;++i) {now=s[i]-'a'+1;if (!tr[p][now]) tr[p][now]=++num;p=tr[p][now];}End[p]=1;
}int main ()
{RG int i,j,p;n=gi(),m=gi();for (i=1;i<=n;++i)scanf("%s",str),Insert(str);while (m--) {scanf("%s",s+1),L=strlen(s+1);memset(f,0,sizeof(f)); for (i=0,f[0]=1;i<=L;++i) {if (!f[i]) continue;j=i+1,p=tr[0][s[j]-'a'+1];while (j<=L&&p) {if (End[p]) f[j]=1;p=tr[p][s[++j]-'a'+1];}}for (i=L;i>=0;--i)if (f[i]) {printf("%d\n",i);break;}}return 0;
}

BY BHLLX

转载于:https://www.cnblogs.com/Bhllx/p/10334336.html

LuoguP2292 L语言相关推荐

  1. [HNOI2004]L语言

    1212: [HNOI2004]L语言 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1507  Solved: 666 [Submit][Stat ...

  2. 1212: [HNOI2004]L语言

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

  3. 【bzoj1212】[HNOI2004]L语言 AC自动机

    题目描述 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写字母构成.一个单词W也是由若干小写字母构成.一个字典D是若干个单词的 ...

  4. 【Trie】bzoj1212 [HNOI2004]L语言

    枚举每个文章里已经在Trie中被标记为可能是分割处的字符,然后再从此处跑Trie,继续向后标记.由于单词数很少,因此复杂度可以接受,O(n*m*Len). #include<cstdio> ...

  5. 2017.9.19 L语言 失败总结

    写了一个下午+半个晚上好不容易调出来然后只有50分之后改了又错.错了又改之后发现自己写的是错的.. 这个题出的太刁钻了,万万没想到这个题是卡2e7的时限题. 所以可以暴力找每个点往后的匹配情况.... ...

  6. 【HNOI2004】L语言

    题目描述 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写字母构成.一个单词W也是由若干小写字母构成.一个字典D是若干个单词的 ...

  7. bzoj1212: [HNOI2004]L语言

    传送门:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1212 思路:这题AC自动机都不用建,只要trie就好了... 首先令f[i]表示到i ...

  8. PHP 语言结构(Language constructs)和函数的区别

    2019独角兽企业重金招聘Python工程师标准>>> 相信大家经常看到对比一些PHP应用中,说用isset() 替换 strlen(),isset比strlen执行速度快等. 例子 ...

  9. php l方法,ThinkPHP的L方法使用简介

    thinkPHP的L方法用于启用多语言的情况下,设置和获取当前的语言定义. 其调用格式为:L('语言变量'[,'语言值']) 1.设置语言变量 除了使用语言包定义语言变量之外,我们可以用L方法动态设置 ...

最新文章

  1. 海康大华RTSP格式
  2. 【CF582E】Boolean Function 树形DP+FWT
  3. 怎么寻找科研论文?(二)
  4. js变量提升_学习笔记:JS中的作用域和预解析
  5. mysql 删除not null_从MySQL的列中删除NOT NULL限制?
  6. OD使用教程13(迷途) - 调试篇13
  7. 基于JQuery框架的AJAX
  8. 我的2008,专注而行
  9. U3D 加在菜单栏加按键 和 动态生成资源束bundles
  10. 【BZOJ 1050】1050: [HAOI2006]旅行comf (动态SPFA)
  11. Cocos2d-x 3.0 开发(七)在程序中处理cocoStudio导出动画
  12. mac用什么软件测试硬盘好坏,8款最好的免费Mac工具,检测和修复常见macOS问题
  13. 网易的java微专业_网易微专业Java开发工程师(Web方向)
  14. Springboot 整合百度地图 API
  15. Android 图片框架原理——Glide源码分析
  16. 雪球网爬取上市公司信息(一):爬取上市公司代号
  17. 算法设计与分析 Dij证明
  18. Python实现数字的补数的两种方法
  19. mysql dos入门_【Mysql】初学命令行指南
  20. 2021上海高考成绩几点查询,2021年上海高考分数公布时间几点,具体时间什么时候可以查询...

热门文章

  1. java中 a_java中 a++ 和 ++a
  2. java应用系统正确的连接DM主备集群
  3. SpringBoot整合HBase将数据写入Docker中的HBase
  4. POJ 3258 -- River Hopscotch(二分)
  5. pb,json,二进制,xml数据对比
  6. c++primer 5th习题12.25答案
  7. 为什么有些美国人名字仅仅只是两个英文字母(并不是缩写)?
  8. 刷新存储器的容量单位是什么_GD25Q80CSIG|相变存储器是什么,具备什么特点?
  9. 基于android的lbs技术,基于Android的LBS应用研究
  10. python 空指针_Python ctypes模块:扩展指针数组时进行NULL指针访问