博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LA 3516
阅读量:5233 次
发布时间:2019-06-14

本文共 2454 字,大约阅读时间需要 8 分钟。

1 #include
2 #include
3 const int maxnode = 105000; //最大节点数 4 const int sigma_size = 26; //最大子节点数 5 int ch[maxnode][sigma_size]; //节点 6 int val[maxnode]; //节点信息 7 int sz; //节点总数 8 int idx(char c) { return c - 'a';} //返回节点编号 9 void Trie_init() { sz = 1; memset(ch[0], 0, sizeof(ch[0])); }10 int tot;11 int Trie_insert(char *s) {12 int u = 0;13 for(int i = 0; s[i]; ++i) {14 int c = idx(s[i]);15 if(!ch[u][c]) {16 memset(ch[sz], 0, sizeof(ch[sz]));17 val[sz] = 0;18 ch[u][c] = sz++;19 }20 u = ch[u][c];21 }22 if(val[u] == 0) return val[u] = ++tot;23 else return val[u];24 }25 int q[maxnode], f[maxnode], last[maxnode];26 void AC_getfail() {27 f[0] = 0;28 int front = 0, rear = -1;29 for(int c = 0; c < sigma_size; ++c) {30 int u = ch[0][c];31 if(u) { f[u] = 0; q[++rear] = u; last[u] = 0;}32 }33 while(front <= rear) {34 int r = q[front++];35 for(int c = 0; c < sigma_size; ++c) {36 int u = ch[r][c];37 if(!u) {ch[r][c] = ch[f[r]][c]; continue;}38 q[++rear] = u;39 int v = f[r];40 while(v && !ch[v][c]) v = f[v];41 f[u] = ch[v][c];42 last[u]= val[f[u]] ? f[u] : last[f[u]];43 }44 }45 }46 int cnt[151];47 void AC_print(int j) {48 if(j) {49 cnt[val[j]]++;50 AC_print(last[j]);51 }52 }53 void AC_find(char *s) {54 int j = 0;55 for(int i = 0; s[i]; ++i) {56 int c =idx(s[i]);57 j = ch[j][c];58 if(val[j]) AC_print(j);59 else if(last[j]) AC_print(last[j]);60 }61 }62 char text[1000001], p[151][80];63 int repi[151];64 int main() {65 int n;66 while(scanf("%d", &n) , n) {67 Trie_init();68 tot = 0;69 for(int i = 0; i < n; ++i) {70 scanf("%s", p[i]);71 repi[i] = Trie_insert(p[i]);72 }73 AC_getfail();74 scanf("%s", text);75 memset(cnt, 0, sizeof(cnt));76 AC_find(text);77 int max = -1;78 for(int i = 0; i < n; ++i) {79 if(cnt[repi[i]] > max) max = cnt[repi[i]];80 }81 printf("%d\n", max);82 for(int i = 0; i < n; ++i) {83 if(cnt[repi[i]] == max) printf("%s\n", p[i]);84 }85 }86 return 0;87 }

 

转载于:https://www.cnblogs.com/startgo/archive/2013/02/05/2893476.html

你可能感兴趣的文章
python学习笔记01-简单接触
查看>>
关于博客的一点计划
查看>>
COJ968 WZJ的数据结构(负三十二)
查看>>
MySQL数据库常用操作和技巧
查看>>
文字或边框等的样式变换
查看>>
二叉树的线索化
查看>>
聊聊高并发(四十四)解析java.util.concurrent各个组件(二十) Executors工厂类
查看>>
mfc笔记--摘录关于裁剪窗口区域的设置,WS_CLIPCHILDREN和WS_CLIPSIBLINGS的理解
查看>>
菜单功能视图
查看>>
第二节课-Data-driven approach:KNN和线性分类器分类图片
查看>>
第三章 指令-- 29 指令-自定义全局指令让文本框获取焦点
查看>>
Jsp之一 WEB应用程序概述
查看>>
java反射机制学习笔记
查看>>
工厂方法
查看>>
html锚点 点击跳转到页面指定位置
查看>>
从零开始学springboot笔记(一)-Spring boot之Hello Word
查看>>
python循环登录之一——用户 密码
查看>>
ubuntu下安装gedit插件
查看>>
[摘录]梅贻琦先生清华就职演讲
查看>>
[ 转载 ] [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)...
查看>>