Link:

BZOJ 1212 传送门

Solution:

看到字符串的多模式匹配,正解一般就是Trie树/AC自动机

此题由于每个模式串长度都很小,于是直接在Trie树上暴力就行了

先把所有模式串建一颗Trie树,

用$DP[i]$表示能否匹配到第$i$个字符,如果能,则从第$i+1$位开始继续从根开始匹配,查看能否拓展答案

上述偏暴力的做法复杂度在$O(4*10^8)$左右,

好像还有一种用AC自动机+状压DP的做法能降到$O(10^6)$,后面再填吧

Code:

#include <bits/stdc++.h>

using namespace std;

const int MAXN=1e6+;
struct trie
{
int ch[];
bool flag;
}tr[]; int n,m,dp[MAXN],cnt=;
char s[MAXN]; int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) //建立Trie树
{
scanf("%s",s);
int cur=,len=strlen(s);
for(int j=;j<len;j++)
{
if(!tr[cur].ch[s[j]-'a']) tr[cur].ch[s[j]-'a']=++cnt;
cur=tr[cur].ch[s[j]-'a'];
}
tr[cur].flag=true;
}
for(int i=;i<=m;i++)
{
scanf("%s",s);memset(dp,,sizeof(dp));
int len=strlen(s);dp[]=;
for(int j=;j<len;j++)
{
if(!dp[j]) continue;
int cur=,k=j;
while(tr[cur].ch[s[k]-'a'])
{
cur=tr[cur].ch[s[k++]-'a'];
if(tr[cur].flag) dp[k]=;
}
}
for(int j=len;j>=;j--)
if(dp[j]){printf("%d\n",j);break;}
}
return ;
}

Review:

看到多模式匹配,往Trie+AC自动机上想就对了

[BZOJ 1212] L语言的更多相关文章

  1. BZOJ 1212 L语言(DP+字典树)

    求能被理解的最长前缀. 很显然的dp.令dp[i]=true,表示前缀i能理解.否则不能理解.那么dp[i+len]=dp[i]=true,当s[len]能匹配str[i,i+len]. 由于模式串长 ...

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

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

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

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

  4. 洛谷(cogs 1293/bzoj 1212) P2292 [HNOI2004]L语言

    1293. [HNOI2004] L语言 ★★★   输入文件:language.in   输出文件:language.out   简单对比时间限制:1 s   内存限制:162 MB [题目描述] ...

  5. 1212: [HNOI2004]L语言

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

  6. 【BZOJ1212】L语言(AC自动机)

    [BZOJ1212]L语言(AC自动机) 题面 BZOJ 题解 很自然的,既然要匹配单词,那就全部都丢到\(AC\)自动机里面去 现在想想怎么匹配 先是\(AC\)自动机正常的匹配 如果此时这个位置能 ...

  7. bzoj1212: [HNOI2004]L语言(字典树)

    1212: [HNOI2004]L语言 题目:传送门 题解: 看完题目之后就觉得可以暴力在字典树上之间询问,一开始还傻了以为用文章来建,肯定用单词啊: 那么我们可以用一个v数组表示当前字符串1~i的区 ...

  8. 【BZOJ1212】[HNOI2004]L语言 Trie树

    [BZOJ1212][HNOI2004]L语言 Description 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写字母构 ...

  9. [HNOI2004]Language L语言

    2777: [HNOI2004]Language L语言 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 10  Solved: 5[Submit][S ...

随机推荐

  1. 【BZOJ 2432】 [Noi2011]兔农 矩乘+数论

    这道题的暴力分还是很良心嘛~~~~~ 直接刚的话我发现本蒟蒻只会暴力,矩乘根本写不出来,然后让我们找一下规律,我们发现如果我们把这个序列在mod k的意义下摆出,并且在此过程中把值为1的的数减一,我们 ...

  2. poj3133 Manhattan Wiring

    Manhattan Wiring Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 2016   Accepted: 1162 ...

  3. Ubuntu14.04 换源 阿里云

    sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup sudo vim /etc/apt/sources.list sudo apt-g ...

  4. PushState+Ajax 完美实现无刷新

    转载自:http://lazynight.me/1897.html 折腾一下PJAX,利用HTML5的新API,实现历史记录的完美导入. 不知道你用没用过Github,里边的目录跳转就是用html5的 ...

  5. iOS 单元测试(Unit Test 和 UI Test)

    之前一直搞过~~最近试了一下下,完美~~ 附上一篇文章,不同的伙伴可以看看: http://www.jianshu.com/p/009844a0b9edUnitTest(简单的单元测试使用) http ...

  6. codevs1163访问艺术馆 树形dp

    算裸的树形dp吧 回来复习一波 #include<cstdio> #include<cstring> #include<algorithm> #include< ...

  7. 专业术语/Java专有名词

    微服务 Web Service WebAPI(MicroSoft) RESTful RPC 微服务 服务拆分,利用轻量化机制(通常为HTTP源API)实现通信,复杂度可控,独立部署,技术选型灵活,容错 ...

  8. Pycharm2017汉化包下载链接

    https://github.com/ewen0930/PyCharm-Chinese/tree/f5a8dc4a8f34398e81a69c69bb046aa4eff27c90 1.首先下载PyCh ...

  9. Tarjan & LCA 套题题目题解

    刷题之前来几套LCA的末班 对于题目 HDU 2586 How far away 2份在线模板第一份倍增,倍增还是比较好理解的 #include <map> #include <se ...

  10. appium===报错Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install io.appium.settings without first uninstalling.的解决办法

    要解决的问题:appium在androidV7.0系统上运行时报错 Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install io.a ...