3172: [Tjoi2013]单词

Time Limit: 20 Sec  Memory Limit: 256 MB

题目连接

http://www.lydsy.com/JudgeOnline/problem.php?id=3172

Description

某人读论文,一篇论文是由许多单词组成。但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次。

Input

第一个一个整数N,表示有多少个单词,接下来N行每行一个单词。每个单词由小写字母组成,N<=200,单词长度不超过10^6

Output

输出N个整数,第i行的数字表示第i个单词在文章中出现了多少次。

Sample Input

3
a
aa
aaa

Sample Output

6
3
1

HINT

题意

题解:

AC自动机,记录尾部的位置在哪儿

代码:

//qscqesze
#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <queue>
#include <typeinfo>
#include <fstream>
#include <map>
#include <stack>
typedef long long ll;
using namespace std;
//freopen("D.in","r",stdin);
//freopen("D.out","w",stdout);
#define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
#define test freopen("test.txt","r",stdin)
#define maxn 200001
#define mod 10007
#define eps 1e-9
int Num;
char CH[20];
//const int inf=0x7fffffff;   //нчоч╢С
const int inf=0x3f3f3f3f;
inline ll read()
{ll x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
inline void P(int x)
{Num=0;if(!x){putchar('0');puts("");return;}while(x>0)CH[++Num]=x%10,x/=10;while(Num)putchar(CH[Num--]+48);puts("");
}
//**************************************************************************************int n,pos[maxn];
int cnt;
int next[maxn][26],sum[maxn],fail[maxn],q[maxn];
char s[maxn];
void insert(int &pos)
{int now=1;scanf("%s",s);int n=strlen(s);for(int i=0;i<n;i++){if(!next[now][s[i]-'a'])next[now][s[i]-'a']=++cnt;now=next[now][s[i]-'a'];sum[now]++;}pos=now;
}
void buildfail()
{int head=0,tail=1;q[0]=1;fail[1]=0;while(head!=tail){int now=q[head];head++;for(int i=0;i<26;i++){int v=next[now][i];if(!v)continue;int k=fail[now];while(!next[k][i])k=fail[k];fail[v]=next[k][i];q[tail++]=v;}}for(int i=tail-1;i>=0;i--)sum[fail[q[i]]]+=sum[q[i]];
}int main()
{//test;int n=read();cnt=1;for(int i=0;i<26;i++)next[0][i]=1;for(int i=1;i<=n;i++)insert(pos[i]);buildfail();for(int i=1;i<=n;i++)printf("%d\n",sum[pos[i]]);return 0;
}

转载于:https://www.cnblogs.com/qscqesze/p/4529474.html

bzoj 3172: [Tjoi2013]单词 AC自动机相关推荐

  1. fail树(bzoj 3172: [Tjoi2013]单词)

    3172: [Tjoi2013]单词 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 4223  Solved: 2051 [Submit][Stat ...

  2. BZOJ3172 TJOI2013 单词 AC自动机

    题意:给定N个字符串,设S为N个字符串首尾相连组成的字符串,查询每个字符串在S中出现的次数. 题解: 首先我们在构造Trie的时候,将构造过程中经过的节点的cnt全部++,此时cnt中记录该模式串被多 ...

  3. bzoj 1398: 寻找主人 AC自动机+最小表示法

    题目大意: 给定两个序列判断是否循环同构,若循环同构则输出最小表示 题解: 因为没有样例输入输出,一开始没看到要求输出最小表示 Wa一大页. 但不得不说bzoj还是挺高效的: 赞一个 XD.jpg 判 ...

  4. BZOJ 1009 GT考试 (AC自动机 + 矩阵乘法加速dp)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1009 题意: 准考证号为\(n\)位数\(X_1X_2....X_n(0<=X_ ...

  5. 1285. 单词 ac自动机 + fail树

    传送门 文章目录 题意: 思路: 题意: 一篇论文由若干单词构成,且单词间是隔开的,给你nnn个单词,要求你计算每个单词在论文中出现了多少次. 1≤n≤2001\le n\le 2001≤n≤200, ...

  6. luogu_3966【题解】单词 AC自动机

    题面:https://www.luogu.org/problemnew/show/P3966 大意:小张最近在忙毕设,所以一直在读论文.一篇论文是由许多单词组成但小张发现一个单词会在论文中出现很多次, ...

  7. bzoj 2553 [BeiJing2011]禁忌——AC自动机+概率DP+矩阵

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2553 看了题解才会-- 首先,给定一个串,最好的划分方式是按禁忌串出现的右端点排序,遇到能填 ...

  8. AC自动机及KMP练习

    好久都没敲过KMP和AC自动机了.以前只会敲个kuangbin牌板子套题.现在重新写了自己的板子加深了印象.并且刷了一些题来增加自己的理解. KMP网上教程很多,但我的建议还是先看AC自动机(Trie ...

  9. 【BZOJ3172】[TJOI2013] 单词(AC自动机的小应用)

    点此看题面 大致题意: 给你NNN个单词,请你求出每一个单词在这NNN个单词中出现的次数. 相关题目 这道题应该是洛谷上一道板子题的升级版. LinkLinkLink [洛谷3796][模板]AC自动 ...

最新文章

  1. c++对象模型之Data布局
  2. 开发购物车应用程序(1)
  3. 通过System.Management获取操作系统信息
  4. java类成员初始化_简单了解Java类成员初始化顺序
  5. 阿里宜搭重磅发布专有云版本、精品应用市场,助力政企数字化转型
  6. tensorflow学习笔记一:安装调试
  7. 写出高质量的代码——“零星”总结(延续3)
  8. 基于上下文的访问控制与基于区域策略的防火墙
  9. java 运行 依赖_java – 运行时中的依赖项确定
  10. 6 检验并打印魔方矩阵c语言,检验并打印魔方矩阵
  11. wordpress 替换国外主题字体为微软雅黑
  12. 【战网】如果直接使用国服战网客户端登录亚服
  13. 关于文件句柄数和文件描述符的区分
  14. c语言编程学多久,丰城c语言编程学习,丰城学c语言编程的学校,丰城学c语言编程一般要多久才能学会...
  15. 大数据开发【3】 -- hadoop的云集群配置
  16. 500G机械硬盘换成120固态硬盘+500G机械硬盘
  17. java一般放在哪个文件里_JDK安装完成后,主要的命令如Javac、Java等都存放在( )文件夹中。...
  18. Redis作者Antirez经历的「性别歧视」风波
  19. NCE loss详解
  20. Unity游戏项目_3D迷宫(游戏源码免费)

热门文章

  1. 软件加入使用时间_Mac实用菜单栏管理小工具 Bartender 3 | Mac软件天堂
  2. 杨云 中科院计算机所,专家人才库数据----中国科学院计算技术研究所
  3. linux 摄像头设置时间同步,linux系统设置时间同步
  4. 学生成绩管理 php,php学生成绩管理系统(模板)
  5. 联想服务器自动关机_IBM 联想 DELL HP服务器自动关机|解决办法整理
  6. vim配置c语言开发环境变量,gcc配置和vim编程
  7. C语言学习笔记----sizeof()的使用
  8. 利用STM32F103单片机输出SPWM波
  9. keras笔记-模型保存以及tensorboard的使用
  10. 转: MATLAB: cat函数使用