BZOJ3172——[Tjoi2013]单词
1、 题目大意:一篇论文是由许多单词组成,现在想知道每个单词分别在论文中出现多少次。
2、分析:对着 广义后缀自动机的图看,我们就会发现玄机,答案不就是这个单词下的后缀个数吗?
于是建立自动机,然后求出right,统计答案就好,另外说一句,right集合用基数排序之后更新一下就好
#include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> using namespace std; struct SAM{ struct node{ int tranc[27], fa, len, right; } a[2002010]; int c[2002010], od[2002010]; int cnt, tail; SAM(){ tail = ++ cnt; } void insert(int k){ int p, np = ++ cnt, q, nq; a[np].len = a[tail].len + 1; a[np].right = 1; for(p = tail; p && !a[p].tranc[k]; p = a[p].fa) a[p].tranc[k] = np; if(!p) a[np].fa = 1; else{ q = a[p].tranc[k]; if(a[q].len == a[p].len + 1) a[np].fa = q; else{ a[nq = ++ cnt] = a[q]; a[q].fa = a[np].fa = nq; a[nq].len = a[p].len + 1; a[nq].right = 0; for(; a[p].tranc[k] == q; p = a[p].fa) a[p].tranc[k] = nq; } } tail = np; } void init(int m){ for(int i = 1; i <= cnt; i ++) c[a[i].len] ++; for(int i = 1; i <= m; i ++) c[i] += c[i - 1]; for(int i = cnt; i >= 1; i --) od[c[a[i].len] --] = i; for(int i = cnt; i >= 1; i --){ int x = od[i]; a[a[x].fa].right+=a[x].right; } return; } } sam; char str[2000100]; int tot; int main(){ int n; scanf("%d", &n); tot = -1; for(int i = 1; i <= n; i ++){ char ch = getchar(); while(ch < 'a' || ch > 'z') ch = getchar(); while('a' <= ch && ch <= 'z'){ str[++ tot] = ch; ch = getchar(); } str[++ tot] = 'z'+1; } tot ++; for(int i = 0; i < tot; i ++) sam.insert(str[i] - 'a'); sam.init(tot); int num; int o = 0; for(int i = 1; i <= n; i ++){ int now = 1, j; for(j = o; ((int)str[j] != 'z'+1) && (j < tot); j ++){ now = sam.a[now].tranc[str[j]-'a']; } o = j + 1; printf("%d\n", sam.a[now].right); } return 0; }
BZOJ3172——[Tjoi2013]单词的更多相关文章
- BZOJ3172 [Tjoi2013]单词 【AC自动机】
3172: [Tjoi2013]单词 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 4293 Solved: 2083 [Submit][Stat ...
- [Bzoj3172][Tjoi2013]单词(fail树)
3172: [Tjoi2013]单词 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 4777 Solved: 2345[Submit][Status ...
- BZOJ3172 [Tjoi2013]单词 字符串 SA ST表
原文链接http://www.cnblogs.com/zhouzhendong/p/9026543.html 题目传送门 - BZOJ3172 题意 输入$n(n\leq 200)$个字符串,保证长度 ...
- BZOJ3172: [Tjoi2013]单词
传送门 做了这么多题怎么还是无法很好的理解AC自动机呢..果然是个制杖 首先题意表述不是很清晰,这些所有的单词组成了那个文章,所以果断建个AC自动机,建的时候给每个点附加一个权值,建树是经过一次权值即 ...
- bzoj千题计划315:bzoj3172: [Tjoi2013]单词(AC自动机)
https://www.lydsy.com/JudgeOnline/problem.php?id=3172 构建AC自动机 在fail树上,点i的子树大小 表示trie树上根节点到i构成的单词 是 多 ...
- BZOJ3172[Tjoi2013]单词——AC自动机(fail树)
题目描述 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. 输入 第一个一个整数N,表示有多少个单词,接下来N行每行一个单词.每个 ...
- bzoj3172: [Tjoi2013]单词 ac自动机
某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. Input 第一个一个整数N,表示有多少个单词,接下来N行每行一个单词.每个单词 ...
- [BZOJ3172 ][Tjoi2013]单词(AC自动机)
Description 不稳定的传送门 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次.单词个数<=200,单词总长度< ...
- 【AC自动机】bzoj3172: [Tjoi2013]单词
fail图上后缀和需要注意一下 Description 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. Input 第一个一个整 ...
随机推荐
- python 培训之Django
1.Install sudo apt-get install python-pip sudo pip install django==1.8 2. Create Project django- ...
- canvas练习
<!doctype html><html><head><meta charset="utf-8"><title>move ...
- gnuplot配置HOME目录
http://blog.csdn.net/jspenliany/article/details/39828261 本人使用gnuplot绘图,使用console version的来进行处理的时候,经常 ...
- netty 解决TCP粘包与拆包问题(一)
1.什么是TCP粘包与拆包 首先TCP是一个"流"协议,犹如河中水一样连成一片,没有严格的分界线.当我们在发送数据的时候就会出现多发送与少发送问题,也就是TCP粘包与拆包.得不到我 ...
- angularjs中ng-change使用方法
ng-change需与ng-model结合使用,官网说明如下:Note, this directive requires ngModel to be present. <label for=&q ...
- angularjs中$watch监听model(对象属性、对象)变化
昨天看了一下教学视频,学到了有关$watch的用法,想到最近做的一个页面中有个select下拉选项(select中的值变化了,则后面input中的值也跟着相应的变化),不知是否可以使用$watch来代 ...
- bootstrap的学习-基础样式和排版一
一.列表去除样式和横排排列 classs="list-unstyled","list-inline" 二.[表格].table 类指定基本样式,.table-s ...
- Java数据结构——双端链表
//================================================= // File Name : FirstLastList_demo //------------ ...
- 第1章 认识jQuery
一.常用的JavaScript库对比 Prototype.Dojo.YUI.Mootools jQuery是一个轻量级的JavaScript库,大型开发必备——由John Resig于2006年创建. ...
- 分享一个控制JS 浏览器缓存的解决办法。
JS 缓存的问题一直都是我们又爱又恨的东西.也是我们比较头痛的问题, 一方面为了提高网站响应速度,减少服务器的负担,和节省带宽,将需要将静态资源缓存在客户端, 但是另一方面,当js 文件有改动的时候 ...