题目描述 字符串是oi界常考的问题.现在给定你n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中至少k个字符串的子串(注意包括本身). 输入 第一行两个整数n,k.接下来n行每行一个字符串. 输出 输出一行n个整数,第i个整数表示第i个字符串的答案. 样例输入 3 1 abc a ab 样例输出 6 1 3 题解 广义后缀自动机 建立广义后缀自动机,统计一下每个节点属于多少个字符串中. 在每次插入新节点np后,parent树上np的父亲节点fa[np]一定有着np的身份,即一定…
3473: 字符串 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 354  Solved: 160[Submit][Status][Discuss] Description 给定n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中至少k个字符串的子串? Input 第一行两个整数n,k. 接下来n行每行一个字符串. Output 一行n个整数,第i个整数表示第i个字符串的答案. 字符串总长度L n,k,L<=1e5 研究了两节多课…
Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1196  Solved: 478[Submit][Status][Discuss] Description 字符串是oi界常考的问题.现在给定你n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中 至少k个字符串的子串(注意包括本身). Input 第一行两个整数n,k. 接下来n行每行一个字符串. n,k,l<=100000 Output 输出一行n个整数,第i个整数表示第i个字符…
今天主攻了下SAM 好多东西以前都没理解到 对于这道题 我们建一个自动机存所有串 每个穿last从1开始 对于自动机上每个点额外记一个cnt 表示能匹配到这个点的不同串个数 建完对每个串在自动机上匹配 把到的每个点$x$和$par[x],par[par[x]]…$的$cnt++$   然后就从父亲往儿子传递一下 这样每个点i就存了所有≤≤len[i]的数量 这里我用的拓扑序转移 最后再对每个串在自动机上跑一遍 统计答案就好啦~ #include<bits/stdc++.h> #define b…
标签那么长是因为做法太多了... 题目链接: (bzoj 3277) https://www.lydsy.com/JudgeOnline/problem.php?id=3277 (bzoj 3473) https://www.lydsy.com/JudgeOnline/problem.php?id=3473 题解: 先讲三个做法公共部分: 建出广义SAM,然后对于每个点求出它在多少字符串中出现过. 做法一 把每个字符串在广义SAM上暴力跑.每跑到一个点就暴力沿着fail树往上跳,标记跳过的点,直…
这题就比较有趣了. 首先匹配一遍,然后统计子树叶子节点中包含大于等于k的节点个数(HH的项链) 然后就可以搞了. 关于合法的情况数,显然是l[i]-l[fa[i]],然后向下下传即可(YY一下). #include <vector> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define F…
Brief Description 给定n个字符串,对于每个字符串,您需要求出在所有字符串中出现次数大于等于k次的子串个数. Algorithm Design 先建立一个广义后缀自动机,什么是广义后缀自动机?就是所有主串一起建立的一个后缀自动机. 广义后缀自动机的建立很简单,对于每个串,该怎么增量建立自动机就怎么建立,只不过为每个节点维护一个set保存这个节点的状态在那些字符串中出现过.当一个串增量构建完毕后,将后缀自动机的last指针指向后缀自动机的根即可进行下一发字符串的增量构建,这样就建出…
题目 给定n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中至少k个字符串的子串? 输入格式 第一行两个整数n,k. 接下来n行每行一个字符串. 输出格式 一行n个整数,第i个整数表示第i个字符串的答案. 输入样例 3 1 abc a ab 输出样例 6 1 3 提示 对于 100% 的数据,1<=n,k<=10^5,所有字符串总长不超过10^5,字符串只包含小写字母. 题解 我们先建一个广义后缀自动机 然后用每个原串在SAM上走,走到的节点就是parent树的叶子节点,将其…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3277 https://www.lydsy.com/JudgeOnline/problem.php?id=3473 学习的博客:https://www.cnblogs.com/HocRiser/p/9580478.html 广义后缀自动机有两种写法,这里写的是 trie 树的那种. 大意就是每个串从自动机的根开始走, 1.如果存在 q = go[p][w] ,且 l [q] == l [p]…
https://www.lydsy.com/JudgeOnline/problem.php?id=3926 广义后缀自动机是一种可以处理好多字符串的一种数据结构(不像后缀自动机只有处理一到两种的时候比较方便). 后缀自动机可以说是一种存子串的缩小点数的trie树,广义后缀自动机就是更改了一下塞点的方式让它可以塞多个串的子串. #include<iostream> #include<cstdio> #include<algorithm> #include<cstri…