正题

luogu 3966
ybtoj AC自动机-2


题目大意

给你n个单词,让你查询这写单词分别在这n个单词中出现过多少次


解题思路

先用AC自动机建好图,然后每个点的权值为1,然后向nx传递


代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define N 1000100
using namespace std;
int n, w, hd, tl, d[N], v[N], a[N], b[N], nx[N], to[N][30];
char s[N];
int insert(char* s)
{int n = strlen(s+1), now = 0;for (int i = 1; i <= n; ++i){int y = s[i] - 'a';if (!to[now][y]) to[now][y] = ++w;now = to[now][y];b[now]++;//权值为1}return now;
}
void bfs()
{hd = tl = 0;for (int i = 0; i < 26; ++i)if (to[0][i]) d[++tl] = to[0][i];while(hd < tl){int h = d[++hd];for (int i = 0; i < 26; ++i)if (!to[h][i]) to[h][i] = to[nx[h]][i];else nx[to[h][i]] = to[nx[h]][i], d[++tl] = to[h][i];}return;
}
int main()
{scanf("%d", &n);for (int i = 1; i <= n; ++i){scanf("%s", s+1);v[i] = insert(s);}bfs();for (int i = tl; i > 0; --i)//传递{int x = d[i];a[x] = b[x];b[nx[x]] += b[x];}for (int i = 1; i <= n; ++i)printf("%d\n", a[v[i]]);return 0;
}

【AC自动机】单词(luogu 3966/ybtoj AC自动机-2)相关推荐

  1. 【AC自动机】病毒代码(ybtoj AC自动机-5)

    正题 ybtoj AC自动机-5 题目大意 给出若干段01串,问你是否存在一个无限的01串,使得串中不存在给出的01串 解题思路 可以把给出01串用AC自动机处理,然后对每个01串的最后一位打上标记 ...

  2. 【AC自动机】屏蔽词删除(ybtoj AC自动机-4)

    正题 ybtoj AC自动机-4 题目大意 有一个字符串和若干要删除的串(不存在包含关系),每次从前往后搜,搜到第一个要删除的串然后删掉,再从0开始搜 问你最后得到的字符串 解题思路 先把所有删除串丢 ...

  3. 【AC自动机】前缀匹配(ybtoj AC自动机-3)

    正题 ybtoj AC自动机-3 题目大意 给你一个字符串和若干匹配串,问你匹配串的前缀和字符串的最大匹配 解题思路 先把所有匹配串丢进AC自动机,然后拿字符串去跑 每次只在当前位置存下贡献,然后按b ...

  4. 【Trie】阅读理解(luogu 3879/ybtoj Trie-4)

    正题 luogu 3879 ybtoj Trie-4 题目大意 给你n篇文章,还有m个单词,问你这些单词在哪几篇文章中出现过 解题思路 对文章中的单词建Trie,然后那查询的单词去匹配 代码 #inc ...

  5. 【KMP】周期长度和(luogu 3435/ybtoj KMP-3)

    正题 luogu 3435 ybtoj KMP-3 题目大意 定义S的proper前缀为S中非空且len<|S|的前缀,若Q是A的proper前缀,且A是QQ的前缀 现在问你字符串S所有前缀的最 ...

  6. 【元胞自动机】基于matlab元胞自动机多车道信号交叉口仿真【含Matlab源码 818期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...

  7. 【元胞自动机】保守策略元胞自动机三车道(不开放辅路,软件园影响)交通流模型matlab源码

    一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何顿 ...

  8. 【元胞自动机】激进策略元胞自动机三车道(开放辅路,软件园影响)交通流模型matlab源码

    一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何顿 ...

  9. 【元胞自动机】基于matlab元胞自动机3D森林火灾模型【含Matlab源码 656期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...

最新文章

  1. 大小端存储模式的理解和判断
  2. Java生鲜电商平台-监控模块的设计与架构
  3. JS表格分页(封装版)
  4. *2-3-7-加入field_automation机制
  5. latex插入表格心得
  6. 欧拉:他停止了生命和计算
  7. php text(),PHP+TEXT留言本(一)
  8. HDU-----(4858)项目管理(模拟)
  9. python的类和对象例题_Python类、类对象和实例对象、组合、绑定详细讲解
  10. Java的GUI学习八(键盘码查询器)
  11. atitit.科技公司的超级武器--超级框架,到底要不要自己的框架??
  12. 详解Android常用抓包工具的使用方法、技巧-学习笔记20220416
  13. vs2005编译apache2.2源码调试
  14. Android的gradle提示Could not resolve com.android.support:support-v4:26+.
  15. K倍交叉验证配对t检验
  16. C++一本通题库1010
  17. 浏览器 - 关于安全证书
  18. 评价类模型---TOPSIS法
  19. 通证大局观(二):通证权益解析
  20. 酷炫的终端模拟器eDEX-UI

热门文章

  1. Mysql存储过程名规则_sql 存储过程命名规范
  2. mockito mock void方法_使用 Junit + Mockito 实践单元测试!
  3. 剑指offer——01二维数组中的查找.
  4. 对象的单数组表示(用单数组实现链表-不一样的链表实现)
  5. 数据结构与算法--查找与排序另类用法-旋转数组中的最小数字
  6. mysql文献综述_文献综述随笔(二十)
  7. oracle 取英文排序,Oracle中中文、数字,英文混杂形式的字段进行排序的方法
  8. E. Almost Sorted(构造,递归)
  9. P2371 [国家集训队]墨墨的等式 同余最短路
  10. bzoj#3456. 城市规划