[BZOJ3172]TJOI2013单词|AC自动机
来源:互联网 发布:电脑行为监控软件 编辑:程序博客网 时间:2024/04/29 17:27
这题比阿狸的打字机不知道简单多了。。还是弄出fail树来 root到每个串的路径上的点都标记+1,统计i串的danger节点在fail树上的子树上的标记个数就是它出现的次数。。
#include<iostream>#include<cstdio>#include<memory.h>#define N 2000005int n,i,nd=1,next[N],a[N][28],size[N],pos[N],que[N];char s[N];int ins(char *s){ int now=1; for (int i=0;i<strlen(s);i++){ if (!a[now][s[i]-'a']) a[now][s[i]-'a']=++nd; now=a[now][s[i]-'a']; size[now]++;} return now;}void build(){ int head=1,tail=1,get,i,now; que[1]=1; while(head<=tail){ get=que[head++]; for (i=0;i<26;i++)if (a[get][i]) {que[++tail]=a[get][i];now=next[get];while (!a[now][i]) now=next[now];next[a[get][i]]=a[now][i]; }} for (i=tail;i>1;i--) size[next[que[i]]]+=size[que[i]];}int main(){ scanf("%d",&n); memset(a,0,sizeof(a)); memset(size,0,sizeof(size)); for (i=0;i<26;i++) a[0][i]=1; next[1]=0; for (i=1;i<=n;i++){ scanf("%s",s); pos[i]=ins(s);} build(); for (i=1;i<=n;i++)printf("%d\n",size[pos[i]]);}
0 0
- [BZOJ3172]TJOI2013单词|AC自动机
- 【bzoj3172】【TJOI2013】【单词】【AC自动机】
- [BZOJ3172] [TJOI2013] 单词 - AC自动机
- [BZOJ3172][TJOI2013]单词-AC自动机
- BZOJ3172 [Tjoi2013]单词 【AC自动机】
- 【BZOJ3172】【Tjoi2013】单词 AC自动机模板题
- 【bzoj3172】[Tjoi2013]单词 AC自动机+fail树
- BZOJ3172 [Tjoi2013]单词(AC自动机+打标记)
- [BZOJ3172][TJOI2013]单词(AC自动机+fail树)
- [BZOJ3172][TJOI2013]单词(AC自动机+fail树)
- 后缀数组/AC自动机——BZOJ3172 [Tjoi2013]单词
- bzoj3172 单词 AC自动机
- bzoj3172.单词(AC自动机)
- [bzoj3172][AC自动机]单词
- 【BZOJ3172】单词,AC自动机练习
- BZOJ_P3172 [Tjoi2013]单词(AC自动机)
- [AC自动机][fail树] bzoj3172 单词
- bzoj3172: [Tjoi2013]单词
- 第14题
- [BZOJ3110]K大数查询|线段树套线段树
- 《机器学习》学习笔记(三):支持向量机(SVM)
- zoj 3605 Find the Marble 计数dp
- hex文件转换为bin文件C语言实现
- [BZOJ3172]TJOI2013单词|AC自动机
- [linux0001]How to fix /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
- c实现:2月29日
- 关于实现微信JSSDK的错误分析
- 阿里笔试部分题目分析(2015实习生 C/C++研发)
- 解题报告 之 CodeForces150A Win or Freeze
- MFC窗口分割/拆分
- [BZOJ3224]普通平衡树
- 本地环境phpstudy设置绑定子目录