2016秋季练习
来源:互联网 发布:淘宝投放手机详情 编辑:程序博客网 时间:2024/06/02 19:38
来源:lightOJ
lightOJ 只有一个AC自动机
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <queue>using namespace std;int n;const int MAXN = 262145;const int ATLN = 26;struct AC_Machine{ int nxt[MAXN][ATLN]; int des[MAXN]; int fail[MAXN]; int fp[MAXN]; int root,L; void ini(){ L = 1; root = 0; memset(fail,0,sizeof fail); memset(nxt,0,sizeof nxt); memset(fp,0,sizeof fp); memset(des,0,sizeof des); } int ins(char *s){ int len = strlen(s); int now = root; for(int i=0;i<len;i++) { int ptr = s[i]-'a'; if(nxt[now][ptr] == 0) nxt[now][ptr] = L++; now = nxt[now][ptr]; } des[now] ++; return now; } void build(){ queue<int>Q; while(!Q.empty()) Q.pop(); int ff; for(int i=0;i<ATLN;i++) { if(nxt[root][i] != 0) Q.push(nxt[root][i]); } while(!Q.empty()){ int now = Q.front();// cout<<"now = "<<now<<endl; Q.pop(); for(int i=0;i<ATLN;i++){ int ptr = nxt[now][i]; if(!ptr) continue; Q.push(ptr); ff = fail[now]; while(ff && nxt[ff][i] == 0) ff = fail[ff]; fail[ptr] = nxt[ff][i]; } } } void lookfor(char *s){ int len = strlen(s); int now = root; for(int i=0;i<len;i++) { int ptr = s[i]-'a'; while(now && nxt[now][ptr] == 0) now = fail[now]; now = nxt[now][ptr]; int tmp = now; while(tmp){ fp[tmp]++; tmp = fail[tmp]; } } }}tree;int ans[600];char P[1000000+100];char Text[600];int main(){ int T,nc = 1; scanf("%d",&T); while(T--){ tree.ini(); scanf("%d",&n); scanf("%s",P); for(int i=1;i<=n;i++){ scanf("%s",Text); ans[i] = tree.ins(Text); }// cout<<"d1"<<endl; tree.build();// cout<<"d2"<<endl; tree.lookfor(P); printf("Case %d:\n",nc++); for(int i=1;i<=n;i++) { printf("%d\n",tree.fp[ans[i]]); } } return 0;}
0 0
- 2016秋季练习
- 2016秋季练习
- 2016秋季练习
- 2016秋季练习
- 2016秋季练习
- 2016秋季练习
- 2016秋季练习
- 2016秋季练习
- 2016秋季练习
- 2016秋季练习
- 2016秋季练习
- 2016秋季练习
- 2016秋季练习
- 2016秋季练习
- 2016秋季练习
- 2016秋季练习
- 2016秋季练习
- 2016秋季练习
- 资源相关命令
- linux设备驱动模型之 bus(总线)原理与实例分析
- HDU 4825 Xor Sum (字典树求异或最大值)
- 自定义数字软键盘
- 跟我一起学C++之重载
- 2016秋季练习
- c语言顺序表的实现与基本操作
- 我们是无耻之徒吗?
- FFmpeg简介
- JDK 1.6 与JDK1.7的区别
- location.herf 和 location.replace
- 百度传课 amazeUI 按钮交互 作业
- mina源码学习之IoSession
- *浙大PAT甲级 1114 并查集