字符串:SAM】的更多相关文章

原文链接https://www.cnblogs.com/zhouzhendong/p/LuoguP4482.html 题意 给定一个字符串 S,有 q 次询问,每次给定两个数 L,R ,求 S[L...R] 的最长前后缀. $$q,|S|\leq 2 \times 10 ^ 5$$ 题解 真是一道有趣的字符串题. 首先我们给 S 建出 SAM ,并用线段树合并预处理出每一个节点的 Right 集合. 我们要做的是找到最大的 $p$ 满足 $p<R, S[L...p] = S[R-p+L...R]…
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ395.html 题解 记得同步赛的时候这题我爆0了,最暴力的暴力都没调出来. 首先我们看看 68 分怎么做 ——求两个串的本质不同的公共子串个数. 它是一个模板题,然而我当时并不会,甚至连SAM都忘了怎么写QAQ. 再简化一下:如何求一个串的本质不同的子串个数. 给串建一个SAM,把所有节点代表的字符串个数(也就是 Max(x) - Max(fa(x)) 加起来就好了. 回到上一个问题. 假设这两个串分…
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ4566.html 题目传送门 - BZOJ4566 题意 给定两个字符串 $s1$ 和 $s2$ ,问有多少 $a,b,c,d$ 满足 $s1[a\cdots b] = s2[c\cdots d]$ . $|s1|,|s2|\leq 200000$ 题解 建个广义 SAM ,然后统计一下. 模板题. 代码 #include <bits/stdc++.h> using namespace std; t…
原文链接https://www.cnblogs.com/zhouzhendong/p/CF235C.html 题目传送门 -  CF235C 题意 给定一个字符串 $s$ ,多组询问,每组询问的形式为一个字符串 $T$ ,问 $S$ 有多少个子串与 $T$ 循环同构.(如果 $S$ 有多个相同子串都同构,则算多次) $|S|\leq 10^6,\sum |T|\leq 10^6$ 题解 以后坚决不念诗了!中午作死念诗,下午就被一个傻逼错误续了 3 个多钟头. 做法: 给 $S$ 建一个 SAM…
原文链接https://www.cnblogs.com/zhouzhendong/p/HDU4622.html 题目传送门 - HDU4622 题意 多组数据. 对于每一组数据,给定一个字符串 s ,以及 m 次询问,每次询问 s 的一个子串的不同子串个数. $|s|\leq 2000,m\leq 10000$ 题解 直接 SAM 预处理一下每一个区间的答案就可以了. 代码 #include <bits/stdc++.h> using namespace std; typedef long l…
原文链接https://www.cnblogs.com/zhouzhendong/p/CF542E.html 题目传送门 - CF452E 题意 给定三个字符串 $s1,s2,s3$ ,对于所有 $L\in{1,2,\cdots,min(|s1|,|s2|,|s3|)}$ ,输出 $f(L)$ . 其中 $f(L)$ 表示满足 $s_k[i_k,\cdots,i_k+L-1]$ 全部相同的 $i_1,i_2,i_3$ 的个数. 答案对 $10^9+7$ 取模. $|s1|+|s2|+|s3|\l…
原文链接https://www.cnblogs.com/zhouzhendong/p/9256033.html 题目传送门 - CF873F 题意 给定长度为 $n$ 的字符串 $s$,以及给定这个字符串每一个位置是否 “禁止结尾” 的信息. 一个字符串 $a$ 的价值为 $|a|\times f(a)$ . 其中 $f(a)$为 $a$ 在 $s$ 中的匹配次数(如果匹配的结尾为禁止结尾点,那么不算匹配成功) 问在所有的字符串 $a$ 中,$\max(|a|\times f(a)$ 的值. $…
原文链接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…
原文链接http://www.cnblogs.com/zhouzhendong/p/9004467.html 题目传送门 - BZOJ1396 题意 给定一个字符串$s$,$|s|\leq 10^5$. 对于$s$的每一个位置,求$s$的包含该位置的.仅在$s$中出现一次的连续子串的最短长度. 题解 考虑先对于$s$构建一个后缀自动机. 由于我们要考虑的串是只能在$s$中出现一次的. 所以我们先基数排序,然后通过$fa$指针计算每一个节点的$Right$集合. 只出现一次的就是$Right$集合…
原文链接http://www.cnblogs.com/zhouzhendong/p/8982484.html 题目传送门 - SPOJ LCS2 题意 求若干$(若干<10)$个字符串的最长公共连续子串长度. 串长$\leq 100000$ 题解 建议在做本题之前,先去做SPOJ LCS,本题是其升级版. 题解链接 - SPOJ LCS - http://www.cnblogs.com/zhouzhendong/p/8982392.html 对于本题,我们只需要保持一下之后每一个串在第一个串的$…
原文链接http://www.cnblogs.com/zhouzhendong/p/8982392.html 题目传送门 - SPOJ LCS 题意 求两个字符串的最长公共连续子串长度. 字符串长$\leq 250000$ 题解 首先对于第一个字符串建一个$SAM$. 然后拿第二个串在$SAM$上面走一遍就好了. 具体地: 将第二个串的字符一个一个地按照顺序加入. 设当前状态为$now$,要加入字符$c$,当前匹配的字符串长度为$len$(答案自然是各种情况下$len$的最大值). 如果在$SA…
这道题市面上就两种法:一种是SA+二分+主席树,一种是SAM+二分+主席树(有不少人打线段树合并???)(除此之外还有一种利用炒鸡水的数据的暴力SA,贼快.....)(当时学SA的时候没做这道题,现在早忘了SA了) 分析题意:就是对于一个字符串,每次询问一个子串在另一个子串里能匹配上的最大前缀(非严格前缀)长度. 我们知道,处理前缀的工具并不是十分充足,后缀倒是有一大帮,所以说把字符串倒过来,而把字符串倒过来是SAM处理问题时的常用技巧.现在,我们直接找答案,仍然很难找到一种时间复杂度合法的做法…
原文链接https://www.cnblogs.com/zhouzhendong/p/CF700E.html 题解 首先建个SAM. 一个结论:对于parent树上任意一个点x,以及它所代表的子树内任意一个点y,设节点y代表的最长串为S,设节点x代表的串为T1,T2,T3,...,设 F(S,T) 表示串T在S中的出现次数,则 F(S,T1) = F(S,T2) = F(S,T3) = ... 证明:假设串 Ta 和 Tb 在 S 中的出现次数不同,且 |Ta|+1=|Tb| 则必然存在一个位置…
题意 链接 Sol \(10^5\)次询问每次询问\(10^5\)个区间..这种题第一感觉就是根号/数据分治的模型. \(K\)是个定值这个很关键. 考虑\(K\)比较小的情况,可以直接暴力建SAM,\(n^2\)枚举\(w\)的子串算出现次数.询问用个\(n^2\)的vector记录一下每次在vector里二分就好. \(K\)比较大的情况我没想到什么好的做法,网上的做法复杂度也不是很好.. 然后写了个广义SAM + 暴力跳parent就过了.. 不过这题思想还是很好的 #include<bi…
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ3926.html 题目传送门 - BZOJ3926 题意 给定一个有 $n$ 个节点,最多只有 $20$ 个度为 $1$ 的节点的树. 树上每一个节点上面都有一个颜色 $a_i$ .颜色范围在 $[0,c)$ 中. 现在从树上任意一个点出发,走到任意一个点停止,走过的最短路径上的颜色依次排成一个序列. 问所有路径生成的序列一共有多少种. $n\leq 10^5,\ \ \ 1\leq c\leq 10…
题意:给你一个子串,m次询问,每次给你abcd,问你子串sa-b的所有子串和子串sc-d的最长公共前缀是多长 题解:首先要求两个子串的最长公共前缀就是把反过来插入变成最长公共后缀,两个节点在parent树上的lca就是最长公共后缀.找到某个子串就是在parent树上倍增 我们先二分答案,问题就变成了子串sx-y的所有子串中是否包含子串p,我们先倍增找到子串p,然后查询p在parent树上的子树是否包含子串sx-y的子串(parent树上的子树就是所有以p作为后缀的子串,如果sx-y的子串包含p,…
LOJ 注意到\(qk \leq 10^5\),我们很不自然地考虑根号分治: 当\(k > \sqrt{10^5}\),此时\(q\)比较小,与\(qm\)相关的算法比较适合.对串\(s\)建SAM,考虑每组询问,将其所有的\((a,b)\)按照\(b\)从小到大排序,然后把\(w\)在\(s\)的SAM上匹配,每当右端点变为\(b\)的时候倍增跳到串\(s[a:b]\)的位置查询endpos即可. 当\(q > \sqrt{10^5}\),此时\(k\)比较小,与\(k^2\)相关的算法比较…
LOJ 思路 这种计数题显然是要先把每一个合法的串用唯一的方法表示出来.(我连这都没想到真是无可救药了) 如何唯一?容易想到把前缀尽可能多地在第一个串填掉,然后填第二个,第三个-- 如何做到这样?可以建出SAM,然后用\(nxt\)数组判断是否还能往后填. 那么如何计数呢?如果从前往后DP要记录一个二进制串表示哪些字符在\(nxt\)里面,或者直接记录用了哪个SAM节点,复杂度爆炸. 从后往前DP,这样就只需要记录最前面那个字符是什么.即设\(dp_{i,c}\)表示用了后面\(i\)个串,最前…
自闭集训 Day3 字符串 SAM 考虑后缀树. SAM的parent树是反串的后缀树,所以后面加一个字符的时候相当于往串前面加一个字符,恰好多出了一个后缀. 于是可以以此来理解SAM. 每一条路径对应原串的一个子串. 每一个终止节点对应一些后缀. 所有到同一个点的路径对应的子串互为后缀,长度连续. parent树是反串的后缀树. SAM可以用来构造SA.(???) 回文树 一个串的本质不同的回文子串的个数是\(O(n)​\)的. 每个点只表示一个回文串. SAM和回文树的复杂度都是均摊的,所以…
ctrl+u可以在shell下删除行,如果此键不起作用,就试试ctrl+x ctrl+z可以将程序挂起,不会终止程序,但可以将程序挂起. 通过fg命令可再把此作业切换到前台 cp命令的目标文件如果是一个已经存在的文件,那么此命令就会把原来的文件覆盖,所以最好把cp命令起别名为:alias cp="cp -i",mv命令也是一样的 ls的-F选项使目录后面显示斜杠,可执行文件后面显示星号 mkdir的-p选择可以通过一个命令把子目录也一并创建出来 不带任何参数的cd命令将把用户的主目录设…
转自:http://blog.csdn.net/gdp12315_gu/article/details/51730584 在我们处理文件时,很多时候会用到查找与替换.当我们想将文件中某一部分替换替换文件中另一部分时,怎么办呢? 下面正则表达式 给我提供方法. 正则表达式,提供复杂 并且弹性的查找与替换 注意: 不支持多行表达式 (involving \n, \r, etc). 1 基本表达式 符号 解释 . 匹配任意字符,除了新一行(\n).也就是说 "."可以匹配 \r ,当文件中同…
(比赛链接)[http://codeforces.com/contest/1120] A 给出一个长度为m的序列a 可以删除一些数 使得最后从没删的第一个数开始 每k个一截 截出的n个多重集合中 至少有一个包含所给的长度为s的多重集b \(n, m, k, s, 两个序列中的数 \leq 5e5\) 考虑每个位置r 找到满足[l, r]中包含b的区间的最大的l 显然l是单调递增的 然后我们需要讨论r - l + 1大于等于k 还是小于k update : 不过其实不用 强行r - l + 1 >…
## 本蒟蒻的小整理qwq--持续更新(咕咕咕) 数据结构 数据结构 知识点梳理 数据结构--线段树 推荐yyb dalao的总结--戳我 以后维护线段树还是把l,r写到struct里面吧,也别写len了,调试不好调qwq 初始化和叶节点初始化不太一样qwq,有的需要统一初始化的就一定注意不要写到if(l==r)里面qwq 求区间最大子段和 例题:codevs动态最大子段和 维护区间和,区间前缀最大子段和,区间后缀最大子段和,区间最大子段和.然后合并.(注意这种跨左右子树还有可能会有贡献的线段树…
NotePad++ 正则表达式替换 高级用法 [转] - aj117 - 博客园 https://www.cnblogs.com/tibit/p/6387199.html const getQAPartnerSites = (params) => wxRequest(params, apiUrlApp + 'ask/show_sites/')const getQARecommender = (params) => wxRequest(params, apiUrlApp + 'ask/quest…
序列化在日常开发中经常用到,特别是涉及到网络传输的时候,例如调用第三方接口,通过一个约定好的实体进行传输,这时你必须实现序列 化,这些都是大家都了解的内容,所以文章也会讲一下序列化的高级内容. 序列化与反序列化简单认知: 我们知道,对象在不具有可达性的时候,会被GC,这些对象都是保存在堆中,而现实中,我们可能需要将对象进行持久化,并且在需要的时候 进行读取转换,这就是序列化的工作. 1.序列化: 将一个对象转换成字节流或者说是字节数组,并且可以存储或传输的形式的过程. 存储:可以把一个对象存储到…
后缀自己主动机(sam)对字符串匹配 ==== 我们已经配置了一个相对较短的模式字符串sam. 为P="abcabcacab", T[1..i]后缀.因此,它是sam最长前缀长度: T: b a b c b a b c a b c a a b c a b c a b c a c a b  c    1 1 2 3 1 1 2 3 4 5 6 7 1 2 3 4 5 6 7 5 6 7 8 9 10 4 假设最长前缀长度是|P|,则表示T[1..i]的后缀和P匹配. 内存使用 可能多个t…
https://gerardnico.com/ide/notepad/replace https://notepad-plus-plus.org/community/topic/16787/find-and-replace-using-regular-expression http://www.pnotepad.org/docs/search/regular_expressions/ TotalErrSaAddr=(.,) //5955 (包含0 和1~9) TotalErrSaAddr=(..…
Day_1 计数 它咕掉了 Day_1 序列数据结构 它咕掉了 Day_2 线性代数 高斯消元\Large{高斯消元}高斯消元 普通版:略 模质数:求逆 模合数:exgcd 逆矩阵\Large{逆矩阵}逆矩阵 AA−1=I=[10⋯001⋯0⋮⋮⋱⋮00⋯1] AA^{-1}=I=\left[ \begin{matrix} 1 & 0 & \cdots & 0 \\ 0 & 1 & \cdots & 0 \\ \vdots & \vdots &…
小明 PAT 考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔 N 个人就发出一个红包.请你编写程序帮助他确定中奖名单. 输入格式: 输入第一行给出三个正整数 M(≤ 1000).N 和 S,分别是转发的总量.小明决定的中奖间隔.以及第一位中奖者的序号(编号从 1 开始).随后 M 行,顺序给出转发微博的网友的昵称(不超过 20 个字符.不包含空格回车的非空字符串). 注意:可能有人转发多次,但不能中奖多次.所以如果处于当前中奖位置的网友已经中过奖,则跳过他顺次取下一位. 输…
3473: 字符串 Description 给定n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中至少k个字符串的子串? Input 第一行两个整数n,k. 接下来n行每行一个字符串. Output 一行n个整数,第i个整数表示第i个字符串的答案. Sample Input 3 1 abc a ab Sample Output 6 1 3 HINT 对于 100% 的数据,1<=n,k<=10^5,所有字符串总长不超过10^5,字符串只包含小写字母. [分析] 这道题用后缀数…