hdu 2222 ac自动机
来源:互联网 发布:linux编程实践教程 编辑:程序博客网 时间:2024/05/27 20:32
好不容易敲好模板好吗,TM还有trick。。。。。查了好几遍代码!!!!!相同字符串按不同处理。。。。。果然这题够222222
#include<cstdio>#include<stdlib.h>#include<string.h>#include<string>#include<cmath>#include<cstring>#include<algorithm>#include<map>#include<set>#include<queue>#include<vector>using namespace std;#define maxno 1000000#define size 26char s[1000009];int ch[maxno][size];int val[maxno];int last[maxno];int f[maxno];int sz;int ans;map<int,int> m;void clea(){ memset(ch[0],0,sizeof(ch[0])); sz=1;}int idx(char x){return x-'a';}void insert(char *s){ int n=strlen(s); int u=0; for(int i=0;i<n;i++) { int c=idx(s[i]); if(!ch[u][c]) { memset(ch[sz],0,sizeof(ch[sz])); val[sz]=0; ch[u][c]=sz++; } u=ch[u][c]; } val[u]++;}void getfail(){ queue<int> q; f[0]=0; for(int i=0;i<size;i++){ if(ch[0][i]) { q.push(ch[0][i]); f[ch[0][i]]=0; last[ch[0][i]]=0; } } while(!q.empty()) { int r=q.front(); q.pop(); for(int i=0;i<size;i++) { int u=ch[r][i]; if(!u) continue; q.push(u); f[u]=0; last[u]=0; int v=f[r]; while(v&&!ch[v][i]) v=f[v]; f[u]=ch[v][i]; if(val[f[u]]) last[u]=f[u]; else last[u]=last[f[u]]; } }}void print(int j){ if(!m[j]&&j) { ans+=val[j]; m[j]=1; print(last[j]); }}void find(){ int n=strlen(s); int j=0; // int u=0; for(int i=0;i<n;i++) { int c=idx(s[i]); while(j&&!ch[j][c]) j=f[j]; j=ch[j][c]; if(val[j]) print(j); else if(last[j]) print(last[j]); }}int main(){// freopen("in.txt","r",stdin);// freopen("out.txt","w",stdout); int t,n; char s1[55]; scanf("%d",&t); while(t--) { clea(); ans=0; m.clear(); //memset(f,0,sizeof(f)); // memset(last,0,sizeof(last)); scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%s",s1); insert(s1); } scanf("%s",s); getfail(); find(); printf("%d\n",ans); } return 0;}
0 0
- AC自动机 hdu 2222
- HDU 2222(AC 自动机)
- hdu 2222 AC自动机
- HDU 2222 AC自动机
- Hdu 2222 [AC自动机]
- hdu 2222 AC自动机 。。
- hdu 2222 AC自动机
- hdu 2222 ac自动机
- hdu 2222 AC自动机
- HDU 2222 AC自动机
- HDU 2222 AC自动机
- hdu 2222 ac自动机
- hdu 2222 AC自动机
- ac自动机 hdu 2222
- hdu 2222 AC自动机
- hdu 2222 ac自动机
- hdu 2222 AC自动机
- HDU 2222 AC自动机
- 轻松搭建hadoop-1.2.1集群--快速配置SSH免密码登陆
- 矩阵链乘(Matrix Chain Multiplication)
- 组合博弈(NIM博弈和巴什博奕组合) hdu 1851
- import com.sun.image.codec.jpeg.JPEGCodec不通过 找不到包
- hdu 3911 Black And White 线段树区间合并
- hdu 2222 ac自动机
- A1006 SignIn and SignOut
- UltraEdit编译C语言程序并运行的示例
- ES学习笔记四-Query DSL
- Android获得全局进程信息以及进程使用的内存情况
- Making R Files Executable (under Windows)
- 【计算机组成与设计学习笔记】(二)
- 2015-02-14 开讲啦 周华健:有没有一首歌会让你想起自己
- 轻松搭建hadoop-1.2.1集群(3)--配置hadoop集群软件