LuoguP2292 L语言
题目描述
令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语言相关推荐
- [HNOI2004]L语言
1212: [HNOI2004]L语言 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1507 Solved: 666 [Submit][Stat ...
- 1212: [HNOI2004]L语言
1212: [HNOI2004]L语言 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 643 Solved: 252 [Submit][Statu ...
- 【bzoj1212】[HNOI2004]L语言 AC自动机
题目描述 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写字母构成.一个单词W也是由若干小写字母构成.一个字典D是若干个单词的 ...
- 【Trie】bzoj1212 [HNOI2004]L语言
枚举每个文章里已经在Trie中被标记为可能是分割处的字符,然后再从此处跑Trie,继续向后标记.由于单词数很少,因此复杂度可以接受,O(n*m*Len). #include<cstdio> ...
- 2017.9.19 L语言 失败总结
写了一个下午+半个晚上好不容易调出来然后只有50分之后改了又错.错了又改之后发现自己写的是错的.. 这个题出的太刁钻了,万万没想到这个题是卡2e7的时限题. 所以可以暴力找每个点往后的匹配情况.... ...
- 【HNOI2004】L语言
题目描述 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写字母构成.一个单词W也是由若干小写字母构成.一个字典D是若干个单词的 ...
- bzoj1212: [HNOI2004]L语言
传送门:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1212 思路:这题AC自动机都不用建,只要trie就好了... 首先令f[i]表示到i ...
- PHP 语言结构(Language constructs)和函数的区别
2019独角兽企业重金招聘Python工程师标准>>> 相信大家经常看到对比一些PHP应用中,说用isset() 替换 strlen(),isset比strlen执行速度快等. 例子 ...
- php l方法,ThinkPHP的L方法使用简介
thinkPHP的L方法用于启用多语言的情况下,设置和获取当前的语言定义. 其调用格式为:L('语言变量'[,'语言值']) 1.设置语言变量 除了使用语言包定义语言变量之外,我们可以用L方法动态设置 ...
最新文章
- 海康大华RTSP格式
- 【CF582E】Boolean Function 树形DP+FWT
- 怎么寻找科研论文?(二)
- js变量提升_学习笔记:JS中的作用域和预解析
- mysql 删除not null_从MySQL的列中删除NOT NULL限制?
- OD使用教程13(迷途) - 调试篇13
- 基于JQuery框架的AJAX
- 我的2008,专注而行
- U3D 加在菜单栏加按键 和 动态生成资源束bundles
- 【BZOJ 1050】1050: [HAOI2006]旅行comf (动态SPFA)
- Cocos2d-x 3.0 开发(七)在程序中处理cocoStudio导出动画
- mac用什么软件测试硬盘好坏,8款最好的免费Mac工具,检测和修复常见macOS问题
- 网易的java微专业_网易微专业Java开发工程师(Web方向)
- Springboot 整合百度地图 API
- Android 图片框架原理——Glide源码分析
- 雪球网爬取上市公司信息(一):爬取上市公司代号
- 算法设计与分析 Dij证明
- Python实现数字的补数的两种方法
- mysql dos入门_【Mysql】初学命令行指南
- 2021上海高考成绩几点查询,2021年上海高考分数公布时间几点,具体时间什么时候可以查询...
热门文章
- java中 a_java中 a++ 和 ++a
- java应用系统正确的连接DM主备集群
- SpringBoot整合HBase将数据写入Docker中的HBase
- POJ 3258 -- River Hopscotch(二分)
- pb,json,二进制,xml数据对比
- c++primer 5th习题12.25答案
- 为什么有些美国人名字仅仅只是两个英文字母(并不是缩写)?
- 刷新存储器的容量单位是什么_GD25Q80CSIG|相变存储器是什么,具备什么特点?
- 基于android的lbs技术,基于Android的LBS应用研究
- python 空指针_Python ctypes模块:扩展指针数组时进行NULL指针访问