LA-3942 (字典树模板)
来源:互联网 发布:sql语句group by的用法 编辑:程序博客网 时间:2024/06/07 05:31
分析:字典树+DP,当做字典树模板来做了。
#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>#include <cmath>using namespace std;string m,s[4001];const int maxnode=400000,tot_size=26;int num,n,f[300001];struct Trie{ int ch[maxnode][tot_size]; int val[maxnode]; int tot; void build() { tot=1; memset(ch[0],0,sizeof(ch[0])); } int idx(char c) { return c - 'a'; } void insert(string s,int v) { int u=0,n=s.length(); for(int i=0;i < n;i++) { int c=idx(s[i]); if(!ch[u][c]) { memset(ch[tot],0,sizeof(ch[tot])); val[tot]=0; ch[u][c]=tot++; } u=ch[u][c]; } val[u]=v; } int find(string s,int now) { int u=0,n=s.length(),ans=0; for(int i=0;i < n;i++) { int c=idx(s[i]); if(!ch[u][c]) return ans; u=ch[u][c]; if(val[u]) ans=(ans+f[now+val[u]])%20071027; } return ans; }} tree;int main(){ cin.sync_with_stdio(false); while(cin>>m) { cin>>n; tree.build(); int Max=0; for(int i=1;i <= n;i++) { cin>>s[i]; tree.insert(s[i],int(s[i].length())); Max=max(Max,int(s[i].length())); } memset(f,0,sizeof(f)); int l=m.length(); f[l]=1; for(int i=l-1;i >= 0;i--) f[i]=(f[i]+tree.find(m.substr(i,min(Max,l-i)),i))%20071027; cout<<"Case "<<++num<<": "<<f[0]<<endl; }}
0 0
- LA-3942 (字典树模板)
- 字典树(背单词,LA 3942)
- UVA 1401 & LA 3942 (字典树Trie+递推)
- LA 3942 字典树+递推
- 字典树(模板)
- LA 3942 - Remember the Word 字典树 dp
- LA 3942 - Remember the Word 字典树+DP
- UVA 1401 & LA 3942 Remember the Word 字典树+DP
- LA 3942 Remember the Word(字典树/树上dp)
- LA 3942 Remember the Word——DP + 字典树
- 字典树模板(HDU1251)
- 字典树模板(java)
- 字典树模板(hdu1251)
- 字典树(模板+总结)
- 字典树(trie)模板
- 字典树(模板题目)
- Trie(字典树模板)
- 字典树(讲解+模板)
- UML图与机房收费系统实例
- 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
- java.lang.ThreadLocal实现原理和源码分析
- 四叉树空间索引原理及其实现
- ios 开发中 动态库 与静态库的区别
- LA-3942 (字典树模板)
- ES2015系列(三) 正则表达式
- 大型网站架构系列:20本技术书籍推荐
- 2016Java工程师面试经验总结
- OpenGL之坐标转换(好文-清晰版)
- spring data jap的openEntityManagerInViewFilter和hibernate的openSessionInViewFilter
- 从今天开始坚持写博客
- Android即时通讯--仿QQ即时聊天:(五)聊天模块
- Java在linux下调用C/C++生成的so文件