【题目链接】

https://loj.ac/problem/10060

【题意】

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

【题解】

与AC自动机模板题3类似,但是这个题目记录的子串是不能重叠的。

利用下标从后往前历遍,然后把对应的位置的地方叠加到公共后缀。原因是:如果该单词出现过,那么对应的公共后缀肯定也出现过。

 #include<cstdio>
#include<algorithm>
using namespace std;
const int N = ;
const int M = 1e6+;
char S[N][];
int Trie[M][],fail[M],End[M],Sz[M];
int Q[M],Head,Tail;
int head[M],nxt[M],to[M],cnt;
int n,idx=; void Add_edge(int u,int v);
void dfs(int u);
void Insert( char s[] , int Id){
int p = ;
for(int i=;s[i];i++){
int t = s[i] - 'a' ;
if( !Trie[p][t] )
Trie[p][t] = ++idx ;
p = Trie[p][t] ;
Sz[p] ++ ;
}
End[Id] = p ;
}
void Build(){
Head = , Tail = ;
for(int i=;i<;i++) Trie[][i] = ; Q[++Tail] = ;
while( Head <= Tail ){
int u = Q[Head++];
for(int i=;i<;i++){
int To = Trie[u][i];
if( To ){
fail[To] = Trie[fail[u]][i];
Q[++Tail] = To;
}else{
Trie[u][i] = Trie[fail[u]][i];
}
}
}
}
void Query(){ /*for(int i=1,p=1;i<=n;i++){
p = 1 ;
for(int j=0;S[i][j];j++){
int t = S[i][j] - 'a' ;
p = Trie[p][t];
Sz[p] ++;
}
}*/ for(int i=idx;i>=;i--){
// Add_edge(fail[i],i);
Sz[fail[Q[i]]] += Sz[Q[i]];
}
//dfs(1);
for(int i=;i<=n;i++){
printf("%d\n",Sz[End[i]]);
}
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%s",S[i]);
Insert(S[i],i); //printf("### %s ### \n",S[i]);
}
Build();
//printf("@@@@\n");
Query();
return ;
}
void dfs(int u){
for(int i=head[u];i;i=nxt[i] ){
int To = to[i] ;
dfs( To ) ;
Sz[u] += Sz[To] ;
}
}
void Add_edge(int u,int v){
nxt[++cnt] = head[u];
head[u] = cnt ;
to[cnt] = v ;
}

不重叠统计次数

【AC自动机】单词的更多相关文章

  1. BZOJ 3172: [Tjoi2013]单词 [AC自动机 Fail树]

    3172: [Tjoi2013]单词 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 3198  Solved: 1532[Submit][Status ...

  2. 【BZOJ3172】[Tjoi2013]单词 AC自动机

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

  3. HDU 2243 考研路茫茫——单词情结(AC自动机+矩阵)

    考研路茫茫——单词情结 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  4. HDU2243 考研路茫茫——单词情结(AC自动机+矩阵快速幂)

    与POJ2778一样.这题是求长度不超过n且包含至少一个词根的单词总数. 长度不超过n的单词总数记为Sn,长度不超过n不包含词根的单词总数记为Tn. 答案就是,Sn-Tn. Sn=26+262+263 ...

  5. BZOJ 3172 单词(ac自动机)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=3172 题意:给出n个单词.输出每个单词在所有单词中一共出现多少次? 思路:首先将所有单词 ...

  6. BZOJ_3172_[TJOI2013]_单词_(AC自动机)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=3172 \(n\)个单词组成一篇文章,求每个单词在文章中出现的次数. 分析 这道题很像BZOJ_ ...

  7. [BZOJ 3172] [Tjoi2013] 单词 【AC自动机】

    题目链接:BZOJ - 3172 题目分析: 题目要求求出每个单词出现的次数,如果把每个单词都在AC自动机里直接跑一遍,复杂度会很高. 这里使用AC自动机的“副产品”——Fail树,Fail树的一个性 ...

  8. hdu_2243_考研路茫茫——单词情结(AC自动机+矩阵)

    题目链接:hdu_2243_考研路茫茫——单词情结 题意: 让你求包含这些模式串并且长度不小于L的单词种类 题解: 这题是poj2788的升级版,没做过的强烈建议先做那题. 我们用poj2778的方法 ...

  9. 【BZOJ3172】单词(AC自动机)

    [BZOJ3172]单词(AC自动机) 题面 Description 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. Input ...

  10. HDU 2243考研路茫茫——单词情结 (AC自动机+矩阵快速幂)

    背单词,始终是复习英语的重要环节.在荒废了3年大学生涯后,Lele也终于要开始背单词了. 一天,Lele在某本单词书上看到了一个根据词根来背单词的方法.比如"ab",放在单词前一般 ...

随机推荐

  1. eclipse CDT Error: Program "g++" not found in PATH

    右击project explore ->properties-  >c/c++ build->environment , 设置 mingw_home 路径

  2. 解决JAVA单步调试键盘输入被JDB占用的问题

    解决JAVA单步调试键盘输入被JDB占用的问题 问题来源: 在完成本周任务时,编写的代码中含有Scanner类,编译及运行过程均正确,但使用JDB单步调试时,运行到输入行无法在JDB内部输入变量值. ...

  3. arcgis python 参数验证

    import arcpy class ToolValidator(object): """Class for validating a tool's parameter ...

  4. ThinkPHP6.0学习之安装及问题解决

    ThinkPHP6.0学习之安装及问题解决 ThinkPHP6.0开发版已经上线了,我已经等了他很久了,现在写一个系列来记录Thinkphp6.0的使用,我们现在从安装开始学习吧. 首先我们要确定Th ...

  5. SQL-W3School-高级:SQL FULL JOIN 关键字

    ylbtech-SQL-W3School-高级:SQL FULL JOIN 关键字 1.返回顶部 1. SQL FULL JOIN 关键字 只要其中某个表存在匹配,FULL JOIN 关键字就会返回行 ...

  6. linux:解决SSH连接Linux超时自动断开

    用SSH登录到Linux的时候,由于默认的连接超时时间很短,经常断开! 1.修改文件 # vi /etc/ssh/sshd_config 2.重启sshd服务 # /etc/init.d/sshd r ...

  7. Qt编写数据可视化大屏界面电子看板12-数据库采集

    一.前言 数据采集是整个数据可视化大屏界面电子看板系统核心功能,没有数据源,这仅仅是个玩具UI,没啥用,当然默认做了定时器模拟数据,产生随机数据,这个可以直接配置文件修改来选择采用何种数据采集方法,总 ...

  8. LVS+Keepalived小试牛刀

    一.ipvsadm命令1.基本命令操作1.1)添加规则 ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p timeout] [-M netm ...

  9. 防止sshd服务被暴力破解

    方法有很多种,这里介绍两种. (1).配置安全的shhd设置 不允许root用户直接登录到系统,添加一个普通用户,必要时再切换到root用户. 修改默认端口号. 不允许密码登录,只能通过密钥登录系统. ...

  10. phpcms前台无法退出无法清除cookie

    phpcms前台无法退出无法清除cookie 如果caches\configs\system.php 中的cookie_path 设置为空..就会出现退不出的情况..设置为'cookie_path' ...