为什么这道题网上所有题解写的都是N*Len的trie树的暴力啊,4E的复杂度。。。

  为什么暴力还跑这么快啊TAT。。

  有一个O(Len)的做法就是先把AC自动机建出来,因为每个字典串的长度很小,所以我们可以用fail树状压一发,每个节点记录一个值ss,表示这个点向前(1~10)的长度的串是不是一个字典串,这个东西延fail树递推就行了。

  然后每次把每个串放AC自动机上走,同时记录一个值T表示(s(1,i-11)~s(1-(i-1)))这些串能否成为答案,如果如果T&ss!=0那么i这个点就可以成为答案。

  

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<queue>
  6. using namespace std;
  7. int n,m;
  8. char s[];
  9. int ch[][];int cnt;int v[];
  10. int fail[];int len[];
  11. void insert()
  12. {
  13. int ln=strlen(s);int now=;
  14. for(int i=;i<ln;i++)
  15. {
  16. int c=s[i]-'a';
  17. if(ch[now][c])
  18. {
  19. now=ch[now][c];
  20. }
  21. else
  22. {
  23. ch[now][c]=++cnt;
  24. len[cnt]=len[now]+;
  25. now=ch[now][c];
  26. }
  27. }
  28. v[now]=;
  29. }
  30. queue<int>q;
  31. unsigned int ss[];
  32. void build()
  33. {
  34. for(int i=;i<;i++)if(ch[][i])q.push(ch[][i]);
  35. while(!q.empty())
  36. {
  37. int tmp=q.front();q.pop();
  38. for(int i=;i<;i++)
  39. {
  40. if(ch[tmp][i])
  41. {
  42. q.push(ch[tmp][i]);
  43. fail[ch[tmp][i]]=ch[fail[tmp]][i];
  44. }
  45. else
  46. {
  47. ch[tmp][i]=ch[fail[tmp]][i];
  48. }
  49. }
  50. if(v[tmp])ss[tmp]=(ss[fail[tmp]]^(<<(len[tmp]-)));
  51. else ss[tmp]=ss[fail[tmp]];
  52. }
  53. return ;
  54. }
  55. unsigned int tmp;
  56. void solve()
  57. {
  58. int ans=;
  59. unsigned int ssr=;
  60. int ln=strlen(s+);
  61. int now=;
  62. for(int i=;i<=ln;i++)
  63. {
  64. int c=s[i]-'a';
  65. now=ch[now][c];
  66. tmp=ssr;
  67. ssr<<=;
  68. if(tmp&ss[now])ans=max(ans,i),ssr^=;
  69. }
  70. printf("%d\n",ans);
  71. return ;
  72. }
  73. int main()
  74. {
  75. scanf("%d%d",&n,&m);
  76. for(int i=;i<=n;i++)
  77. {
  78. scanf("%s",s);
  79. insert();
  80. }
  81. build();
  82. for(int i=;i<=m;i++)
  83. {
  84. scanf("%s",s+);
  85. solve();
  86. }
  87. return ;
  88. }

bzoj 1212: [HNOI2004]L语言 AC自动机+状压的更多相关文章

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

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

  2. BZOJ 1212 HNOI2004 L语言 AC自己主动机(Trie树)+动态规划

    标题效果:给定词的列表,并m串 每个字符串q个最长前缀,这个前缀可满足拆分成一些字符串 这些字符串中存在的词汇太 再也不怕错误的数据范围--有一个很明显Trie树能解决的问题竟然被我写的AC自己主动机 ...

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

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

  4. BZOJ 1212 [HNOI2004]L语言 【AC自动机 + 背包】

    题目链接[http://www.lydsy.com/JudgeOnline/problem.php?id=1212] 题意:给你一些单词,然后给出一个没有标点的文本串S,都是小写字符.现在让你求用给出 ...

  5. [HNOI2004] L语言 - AC自动机,dp

    给定字典和没有标点的文章,求能够被识别的最长前缀. 显然不能贪心,设\(f[i]\)表示前\(i\)个字符构成的前缀能否被识别,然后在AC自动机上暴力转移即可. 具体来说,每走到一个新位置,就沿着fa ...

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

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

  7. bzoj 1212: [HNOI2004]L语言

    思路:字典树+dp, dp[ i ] 表示 前缀到 i 能不能被理解, 如果dp[ i ] 是能被理解的那么, 把i + 1, i + 2 ....  在字典树上走,走到一个单词就转移. ,这样可行的 ...

  8. BZOJ 1212: [HNOI2004]L语言 trie

    长度小于 10 是关键信息~ #include <cstdio> #include <cstring> #include <algorithm> #define N ...

  9. 1212: [HNOI2004]L语言

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

随机推荐

  1. python FTP服务器实现(Python3)

    创建一个ftp.py文件(Linux环境),插入以下代码: from pyftpdlib.authorizers import DummyAuthorizer from pyftpdlib.handl ...

  2. Mysql报错型注入总结

    Mysql注入虽然是老生常谈的问题,但是工作中更多的是使用sqlmap等工具进行注入测试的,原理方面还是不是很清楚,所以这段时间主要是自己搭建环境在学手工注入,简单的将自己的学习做一个总结和记录.在常 ...

  3. Erlang数据类型的表示和实现(1)——数据类型回顾

    本文介绍 Erlang 语言中使用的各种数据类型以及这些数据类型在 Erlang 虚拟机内部的表示和实现.了解数据类型的实现可以帮助大家在实际开发过程中正确选择数据类型,并且可以更好更高效地操作这些数 ...

  4. partprobe命令详解

    基础命令学习目录首页 原文链接:https://www.jb51.net/LINUXjishu/389836.html linux上,在安装系统之后,可否创建分区并且在不重新启动机器的情况下系统能够识 ...

  5. C++ Style Languages: C++, Objective-C, Java, C#

    Hyperpolyglot.org From Hyperpolyglot.org C++ Style Languages: C++, Objective-C, Java, C# a side-by-s ...

  6. Java第二次实验20135204

    一.实验过程: 1.先创建一个学号命名的文档: 2.一个百分制成绩转化为等级: 3.新建一个包,另一个测试: 4.打开UML,建模软件umbrello进行建模: 相关程序: 5.我的保存: 二.遇到的 ...

  7. Codeforces Round #157 (Div. 1) B. Little Elephant and Elections 数位dp+搜索

    题目链接: http://codeforces.com/problemset/problem/258/B B. Little Elephant and Elections time limit per ...

  8. BETA-6

    前言 我们居然又冲刺了·六 团队代码管理github 站立会议 队名:PMS 530雨勤(组长) 过去两天完成了哪些任务 新方案代码比之前的更简单,但是对场景的要求相应变高了,已经实现,误差感人 代码 ...

  9. apache 2.4目录权限

    apache 2.4 好象不再支持以下指令...Order allow,denyAllow from all 用上面的指令访问页面时显示错误:client denied by server confi ...

  10. Spring框架的补充

    1.使用xml文件方式配置bean ——property标签ref属性和ref标签区别 <property name=“bean” ref="myBbean" /> r ...