首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
本质不同的子串 sam
2024-10-22
Solution -「洛谷 P6292」区间本质不同子串个数
\(\mathcal{Description}\) Link. 给定长度为 \(n\),仅包含小写字符的字符串 \(s\),\(m\) 次询问,每次询问一个子串 \(s[l:r]\) 的本质不同子串数量. \(n\le10^5\),\(m\le2\times10^5\). \(\mathcal{Solution}\) 有种常见的离线技巧:类似扫描线,从左至右枚举右端点 \(r\),维护 \([1..r,r]\) 的答案.为了让 \(s[1:r]\) 里的每个子串都尽量参与贡献,可
HDU6599:求本质不同的子串(回文串)长度及数量
目录 hdu6599题意: manacher+后缀自动机+倍增 \(O(nlog(n))\) manacher+后缀数组+二分 \(O(nlog(n))\) 回文树(回文自动机) \(O(n)\) @(hdu6599:求本质不同的回文串长度及数量) 欢迎交流 hdu6599题意: 传送门: here 求有多少个回文串的前\(⌈ \frac {len}{2} ⌉\)个字符也是回文串.(两组解可重复) 将这些回文串按长度分类,分别输出长度为\(1,2,...,n\)的合法串的数量. 前期分析: 首先
BZOJ4032:[HEOI2015]最短不公共子串(SAM)
Description 在虐各种最长公共子串.子序列的题虐的不耐烦了之后,你决定反其道而行之. 一个串的“子串”指的是它的连续的一段,例如bcd是abcdef的子串,但bde不是. 一个串的“子序列”指的是它的可以不连续的一段,例如bde是abcdef的子串,但bdd不是. 下面,给两个小写字母串A,B,请你计算: (1) A的一个最短的子串,它不是B的子串 (2) A的一个最短的子串,它不是B的子序列 (3) A的一个最短的子序列,它不是B的子串 (4) A的一个最短的子序列,它不是B的子序列
BZOJ1396:识别子串(SAM)
Description Input 一行,一个由小写字母组成的字符串S,长度不超过10^5 Output L行,每行一个整数,第i行的数据表示关于S的第i个元素的最短识别子串有多长. Sample Input agoodcookcooksgoodfood Sample Output 1 2 3 3 2 2 3 3 2 2 3 3 2 1 2 3 3 2 1 2 3 4 Solution 1A挺开心的省得调了对于SAM上的每一个节点,我们只需要考虑right集合大小为1的设一个right集合大小为
bzoj4032: [HEOI2015]最短不公共子串(SAM+DP)
4032: [HEOI2015]最短不公共子串 题目:传送门 题解: 陈年老题良心%你赛膜爆嘎爷 当初做题...一眼SAM...结果只会两种直接DP的情况... 情况1: 直接设f[i][j] 表示的是a串的第i个位置和b串的第j个位置开始的最长公共前缀(灵感来源于SA).然后就枚举开头直接瞎搞啊... 情况2: 定义一个last[i][j] 表示b串的位置i后面的第一个字符j,贪心的思想直接做,匹配不到位置就直接记录答案了嘛 情况3: 因为是在b串当中找子串,a中找子序列,那就考虑对b建SAM
luoguP4112 [HEOI2015]最短不公共子串 SAM,序列自动机,广搜BFS
luoguP4112 [HEOI2015]最短不公共子串 链接 luogu loj 思路 子串可以用后缀自动机,子序列可以用序列自动机. 序列自动机是啥,就是能访问到所有子序列的自动机. 每个点记录下一个字母最近出现的位置.不过我这里构造是\(O(n^2)\). 然后进行bfs进行广搜就行了. 注意vis[][]剪枝,要不TLE. 代码 #include <bits/stdc++.h> #define ll long long using namespace std; const int N=
SPOJ SUBST1 New Distinct Substrings(后缀数组 本质不同子串个数)题解
题意: 问给定串有多少本质不同的子串? 思路: 子串必是某一后缀的前缀,假如是某一后缀\(sa[k]\),那么会有\(n - sa[k] + 1\)个前缀,但是其中有\(height[k]\)个和上一个重复,那么最终的贡献的新串为\(n - sa[k] + 1 - height[k]\).故最终结果为\(\sum_{i = 1}^n (n - sa[k] + 1 - height[k])\),即 \(\frac{n * (n + 1)}{2} - \sum_{i = 1}^nheight[k]\
bzoj 3926 [Zjoi2015]诸神眷顾的幻想乡(SAM)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3926 [题意] 给定一棵树,每个节点都有相应的颜色,且保证叶子数不超过20,问有多少条本质不同的颜色路径. [思路] 从每个叶子开始dfs,构建广义后缀自动机,答案为l[i]-l[fa[i]]的和. 从每个叶子dfs,将每个叶子到所有节点的路径作为一个字符串插入SAM,这样就覆盖了所有的树上路径,树上的一条路径一定对应着一个字符串的某个子串. SAM本身会忽略重复的子
后缀自动机(SAM)学习笔记
目录 定义 SAM 的状态集 一些性质 SAM 的后缀链接 SAM 的转移函数 一些性质 算法构造 构造方法 时间复杂度证明 状态的数量 转移的数量 代码实现 实际应用 统计本质不同的子串个数 计算任意子串出现次数 统计所有本质不同子串的权值和 求循环串在原串中出现次数 SAM 上博弈与 trans 上查询 题意 题解 此篇博客大部分内容来自于 hihoCoder , 借此学习 !! (侵删) 主要是上面讲的通俗易懂qwq 本文只是将其用更好的格式进行展现,希望对读者有帮助. 而且以后博客的 m
UOJ#395. 【NOI2018】你的名字 字符串,SAM,线段树合并
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ395.html 题解 记得同步赛的时候这题我爆0了,最暴力的暴力都没调出来. 首先我们看看 68 分怎么做 ——求两个串的本质不同的公共子串个数. 它是一个模板题,然而我当时并不会,甚至连SAM都忘了怎么写QAQ. 再简化一下:如何求一个串的本质不同的子串个数. 给串建一个SAM,把所有节点代表的字符串个数(也就是 Max(x) - Max(fa(x)) 加起来就好了. 回到上一个问题. 假设这两个串分
SA / SAM 题目集
上一次做 SA / SAM 相关的题还要数到某场毒瘤 NOIP 模拟赛--这么久没做了都快忘光了--写点东西记录一些最近做到的水好题. LOJ2059 「TJOI / HEOI2016」字符串 题意 给定一个长度为 \(n\) 的字符串 \(s\) ,接下来有 \(m\) 次询问.每次询问给出四个参数 \(a,b,c,d\) .求 \(s[a,b]\) 的所有子串和 \(s[c,d]\) 的 LCP 的最大值. \(n,m \le 10^5\) . 题解 题目可以转化为,求一段连续的后缀与 \(
SAM练习记录
SAM练习记录 洛谷 P1368 工艺 其实是最小表示法裸题 倍长后建SAM跑最小的边走|S|步即可 Code CF 235 C. Cyclical Quest 对主串建SAM 然后每个串倍长,跑的时候维护一下匹配长度再更新答案,还有判断一个节点是否重复到达. Code BZOJ1396: 识别子串 一开始写这个题的时候固执的认为是线段树合并.. 显然出现次数为1的串的rigit集合大小为1,我们直接处理一下就好了,设Ta和Ta父亲的长度是\(len_x\)和\(len_p\) 那么在区间\([
Codeforces 316G3 Good Substrings 字符串 SAM
原文链接http://www.cnblogs.com/zhouzhendong/p/9010851.html 题目传送门 - Codeforces 316G3 题意 给定一个母串$s$,问母串$s$有多少本质不同的子串$t$是“好”的. 一个字符串$t$是好的,仅当$t$满足了所有的$n$个条件. 第$i$个条件用一个三元组$(p_i,L_i,R_i)$来描述. 其中$p_i$为一个字符串,$L_i,R_i$为整数,且$L_i\leq R_i$. 仅当字符串$t$在$p_i$中出现次数在$L_i
【算法】后缀自动机(SAM) 例题
算法介绍见:http://www.cnblogs.com/Sakits/p/8232402.html 广义SAM资料:https://www.cnblogs.com/phile/p/4511571.html [例题] 参考http://www.cnblogs.com/Candyouth/p/5368750.html 1.洛谷P3804[模板]后缀自动机 因为$Parent$树上的叶子节点有可能变成一个父亲节点,所以可能某个叶子节点$r_i$不存在,比如$aa$,$r_i=1$的就不存在,它从一个
bzoj4516: [Sdoi2016]生成魔咒 sam
题意:每次插入一个数字,查询本质不同的子串有多少个 题解:sam,数字很大,ch数组用map来存,每次ins之后查询一下新建点表示多少个本质不同的子串(l[np]-l[fa[np]]) /************************************************************** Problem: 4516 User: walfy Language: C++ Result: Accepted Time:804 ms Memory:16600 kb ********
Distinct Substrings(spoj694)(sam(后缀自动机)||sa(后缀数组))
Given a string, we need to find the total number of its distinct substrings. Input \(T-\) number of test cases. \(T<=20\); Each test case consists of one string, whose length is \(<=1000\) Output For each test case output one number saying the numbe
后缀自动机(SAM)速成手册!
正好写这个博客和我的某个别的需求重合了...我就来讲一讲SAM啦qwq 后缀自动机,也就是SAM,是一种极其有用的处理字符串的数据结构,可以用于处理几乎任何有关于子串的问题,但以学起来异常困难著称(在机房里,最先学会SAM的永远是大佬(比如litble和zyf(他在退役前就学了))). 但是!!!当你学了SAM并熟练地刷了几道题后,你会发现--你之前为了学SAM而强行理解的许多定理,对你应用SAM一点用处也没有!为了引出构造算法,几乎所有博客都会详细地解释"你为啥要这样做",然鹅...
[NOI2018]你的名字(SAM+线段树合并)
考虑l=1,r=n的68分,对S和T建SAM,对T的SAM上的每个节点,计算它能给答案带来多少贡献. T上节点x代表的本质不同的子串数为mx[x]-mx[fa[x]],然后需要去掉所代表子串与S的最长公共子串的长度. 从1到length(T)扫一遍,SAM基本操作求出每个前缀与S的最长公共子串. 答案为$\sum_{i=1}^{cnt}max(0,mx[x]-max(mx[fa[x]],len[tag[x]]))$,其中tag[x]是x所代表的子串在T中的第一个出现位置,len[i]为T的前缀i
【BZOJ4516】【SDOI2016】生成魔咒 [SAM]
生成魔咒 Time Limit: 10 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1.2 拼凑起来形成一个魔咒串 [1,2]. 一个魔咒串 S 的非空字串被称为魔咒串 S 的生成魔咒. 例如 S=[1,2,1] 时,它的生成魔咒有 [1].[2].[1,2].[2,1].[1,2,1] 五种. S=[1,1,1] 时,它的生成魔咒有 [1].[
【SAM】loj#6401. 字符串
网上有篇题解写的是线段树合并维护求值? 题目描述 有一个只包含小写字母,长度为 $n$ 的字符串 $S$ .有一些字母是好的,剩下的是坏的. 定义一个子串 $S_{l\ldots r}$是好的,当且仅当这个子串包含不超过 $k$ 个坏的字母. 求有多少个不同的满足以下要求的字符串 $T$ : $T$ 作为 $S$ 的子串出现过. 存在一个 $T$ 出现的位置 $[l,r]$ ,满足 $S_{l\ldots r}$ 是好的. 输入格式 第一行有一个字符串 $S$ . 第二行有一个字符串 $B$
Sam做题记录
Sam做题记录 Hihocoder 后缀自动机二·重复旋律5 求一个串中本质不同的子串数 显然,答案是 \(\sum len[i]-len[fa[i]]\) Hihocoder 后缀自动机三·重复旋律6 求一个串每个长度出现次数的最大值 求出fail树每个点的size就是该点的出现次数,由于答案是(非严格)单调减的,每个点更新一下 \(ans[len[i]]\) Hihocoder 后缀自动机四·重复旋律7 求几个数字串本质不同的子串所代表的数的和, \(mod\ 10^9+7\) 先建一下广义
热门专题
自动化如何点击到下层的元素
hadoop垃圾回收机制
安卓和windows都可以下载的阅读软件
shell判断是否挂载
jquery监听input有没有值
C# qr 二维码 解码
tp5 如何引用工具包
uniapp中本地缓存怎么删除
cgcs2000 投影 坐标 地理
json数据调整显示图层
爬楼梯算法 golang
mybatis中如何使用逗号作为分隔符进行数据插入
路由器静态ARP生命周期
VMWEAR 启动过程中FAILED
css ie6 兼容属性placeholder
ubuntu 获取网卡详细设置
自动化测试日志输出到整个文件
解决WIN10蓝牙只能配对无法连接
4720hq核显什么水平
允许远程桌面连接这台计算机