【模板】字典树
来源:互联网 发布:apache ant jar包 编辑:程序博客网 时间:2024/06/06 11:48
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <cctype>#define to(c) c - 'a'using namespace std;const int MAXN = 24000;const int Alpha = 26;const int C = 50;int map[MAXN * C + 10][Alpha];int sz;bool flag[MAXN * C + 10];int root;bool find(char *c,int l)//查询--单词 单词长度 { int now = 0; for(int i = 0;i < l;i ++) { if(!map[now][to(c[i])]) return false;//不匹配 now = map[now][to(c[i])]; } return flag[now];//当且仅当返回true时该单词存在//flag结束标记 这里匹配的可能只是某个单词前缀实际上该单词不存在 所以不能return true要看标记 }void find(char *c,int l)//删除 { int now = 0; for(int i = 0; i < l; i ++) { if(!map[now][to(c[i])]) return; now = map[now][to(c[i])]; } flag[now] = false;//找到最后的结束标记并删除即可 return; //找不到的话也就不能用了 }void insert(char *c,int l){ int now = root; for(int i = 0;i < l;i ++) { if(!map[now][to(c[i])]) map[now][to(c[i])] = ++sz;//sz == size 给新节点定编号 now = map[now][to(c[i])];//now当前节点(编号) } flag[now] = true; return;}int ans;void dfs(int x,int tot){ if(!x) { ans = max(ans,tot); return; } tot += flag[x]; for(int i = 0;i < 26;i ++) dfs(map[x][i],tot); tot -= flag[x]; return;}char s[MAXN];int n;int main(){ scanf("%d",&n); for(int i = 1;i <= n;i ++) { scanf("%s",s); insert(s,strlen(s)); } for(int i = 0;i < 26;i ++) dfs(map[0][i],flag[0]); printf("%d\n",ans); return 0;}
0 0
- 字典树 模板
- 字典树【模板】
- 字典树模板
- 字典树模板
- 字典树模板
- 经典字典树模板
- hdu1247 字典树模板
- 字典树模板
- 字典树模板
- 字典树模板
- 字典树模板
- 字典树 模板
- 1251 字典树 模板
- 数据结构 字典树模板
- 字典树模板
- 字典树(trie)模板
- 字典树 模板+讲解
- 字典树模板
- Android 开发学习笔记(一) LRU 算法的使用
- Android 动画完全解析
- RobotFrameWork(三)数据类型
- pod常见的问题
- android:screenOrientation详解
- 【模板】字典树
- 可能是最接近微信朋友圈的图片压缩算法
- 【UNITY资料】UNITY多语言化Localtion的工具 I2 Localization2.6.5 资料教程(一)
- 33. Search in Rotated Sorted Array
- 为什么Android的图片质量会比iPhone的差?
- libcurl http get
- 私有IP
- mysql性能优化之配置优化
- 终于下决心写点东西