Trie——Luogu2292/BZOJ1212 [HNOI2004]L语言
来源:互联网 发布:戏子屁事天下知实例 编辑:程序博客网 时间:2024/05/14 23:23
https://www.luogu.org/problem/show?pid=2292
http://www.lydsy.com/JudgeOnline/problem.php?id=1212
一题Trie字典树
这题原本标算是AC自动机!!!(好像说是因为文章长度有1M)
其实也不用AC自动机,Trie上面乱搞也能过。。。
(会不会是出题人为了吓吓人写了文章长度233)
我们开个数组f[i]记录当前文章的前i的前缀是可行的,答案就是max(i)(f[i]可行)
然后在Trie上面跑一遍就好了
#include<bits/stdc++.h>using namespace std;char c[1000001];int np=0,p[1001][26],b[1001];int f[1000001];inline void insert(){ int now=0,l=strlen(c+1); for(int i=1;i<=l;i++){ int t=c[i]-'a'; if(!p[now][t])p[now][t]=++np; now=p[now][t]; } b[now]=1;}inline void check(int rp){ int now=0,ans=0,l=strlen(c+1); f[0]=rp; for(int i=0;i<=l;i++){ if(f[i]!=rp)continue; now=0; for(int j=i+1;j<=l;j++){ int t=c[j]-'a'; if(!p[now][t])break; now=p[now][t]; if(b[now])ans=max(ans,j),f[j]=rp; } } printf("%d\n",ans);}int main(){ int n,m;scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ scanf("%s",c+1); insert(); } for(int i=1;i<=m;i++){ scanf("%s",c+1); check(i); } return 0;}
1 0
- Trie——Luogu2292/BZOJ1212 [HNOI2004]L语言
- bzoj1212: [HNOI2004]L语言 Trie+dp
- 【BZOJ1212】[HNOI2004]L语言【Trie】【暴力】
- bzoj1212 [HNOI2004]L语言(Trie+暴力)
- [bzoj1212] [HNOI2004]L语言(trie+dp)
- [BZOJ1212]-[HNOI2004]L语言-trie+DP
- 【luogu2292】[HNOI2004]L语言
- bzoj1212: [HNOI2004]L语言
- 【BZOJ1212】【HNOI2004】L语言
- bzoj1212: [HNOI2004]L语言
- bzoj1212: [HNOI2004]L语言
- bzoj1212: [HNOI2004]L语言
- bzoj1212 L语言 trie
- BZOJ1212——L语言
- BZOJ1212: [HNOI2004]L语言 AC自动机
- bzoj1212 [HNOI2004]L语言(AC+dp)
- [DP+AC自动机] BZOJ1212: [HNOI2004]L语言
- trie-[HNOI2004]L语言
- 算法--二分查找
- 部署Tomcat的方法
- Android 在子线程更新UI(调用系统方法)
- 堆和栈的区别
- 多个参数如何接收
- Trie——Luogu2292/BZOJ1212 [HNOI2004]L语言
- pdf页面上的页眉页脚要怎么删除
- HTML5 Canvas实现360度全景图
- RealFlow在线教程翻译(5)——Shattered Glass (破碎的玻璃杯)
- 通过servlet实现分页
- JAVA设计模式之代理模式
- BestCoder Round #92 1001 Skip the Class —— trie树 or map容器
- 美国原装笔记本7槽PCIe扩展坞 EB7
- MySQL和ORACLE每天自动增加分区