随笔分类 -  字符串——后缀自动机

摘要:"传送门" $Maximum\ Remaining$ 对于两个数$a,b$,如果$a=b$没贡献,所以不妨假设$a define R register define fp(i,a,b) for(R int i=(a),I=(b)+1;iI; i) define go(u) for(int i=hea 阅读全文
posted @ 2019-04-15 17:45 bztMinamoto 阅读(283) 评论(2) 推荐(0)
摘要:题面 "传送门" 题解 首先,我们把串反过来,那么前缀就变成后缀,建一个$SAM$。我们发现一个节点的后缀是它的所有祖先 那么我们是不是直接按着$parent$树建边就可以了呢? 显然不是。我们假设在$SAM$的某个节点上同时存在某个$a_i$和$b_j$且$|b_j| |a_i|$,$b_j$不是 阅读全文
posted @ 2019-04-10 16:23 bztMinamoto 阅读(337) 评论(0) 推荐(0)
摘要:这套题目非常有意思啊23333……话说为啥没有上条先生的呢…… "传送门" $A$ 御坂美琴 蠢了……首先先判总共加起来等不等于$n$,不是的话就不行 然后dfs记录$n$不断分下去能分成哪些数,用map记录一下,判断是否所有数都能被分出来就是了 $B$ 白井黑子 好坑啊……话说居然有$f(0)=1 阅读全文
posted @ 2019-03-29 22:17 bztMinamoto 阅读(270) 评论(0) 推荐(0)
摘要:题面 "传送门" 题解 后缀平衡树是个啥啊我不会啊…… 那么我们来考虑一下$SAM$的做法好了 不难发现它的本义是要我们维护一棵$trie$树,并求出$trie$树上每一个节点到根的这段串的不同子串个数,而显然一个串的不同子串个数就是它的$SAM$上每一个节点的$len[p] len[fa[p]]$ 阅读全文
posted @ 2019-03-23 10:56 bztMinamoto 阅读(285) 评论(0) 推荐(0)
摘要:题面 "传送门" 题解 ~~为什么成天有人想搞些大新闻~~ 这里写的是$yyb$巨巨说的启发式合并的做法(虽然$LCT$的做法不知道比它快到哪里去了……) 建出$SAM$,那么两个前缀的最长公共后缀就是它们在$parent$树上的$LCA$的深度 对于每一个子串来说,所有和它相同的串里只有它的前驱和 阅读全文
posted @ 2019-03-13 14:05 bztMinamoto 阅读(227) 评论(0) 推荐(0)
摘要:题面 "传送门" 题解 字符串就硬是要和数据结构结合在一起么……$loj$上$rk1$好像码了$10k$的样子…… 我们设$L=r l+1$ 首先可以发现对于$T$串一定是从左到右,能取就取是最优的 我们先用后缀自动机$+$线段树合并求出自动机上每一个节点的$endpos$集合。如果$L$较大的时候 阅读全文
posted @ 2019-03-13 13:04 bztMinamoto 阅读(274) 评论(0) 推荐(0)
摘要:"传送门" 没想出来→_→ 首先不难看出要差分之后计算不相交也不相邻的相等子串对数,于是差分之后建SAM,在parent树上用线段树合并维护endpos集合,然后用启发式合并维护一个节点对另一个节点的贡献,于是总的时间复杂度为$O(n\log^2n)$ 阅读全文
posted @ 2019-01-02 10:22 bztMinamoto 阅读(256) 评论(0) 推荐(0)
摘要:传送门 我有种自己根本没学过SAM的感觉……最后还是抄了老半天的题解…… 首先,对$S$和每一次的$T$都建一个SAM 先考虑一下$l=1,r=\left| S \right|$的情况 设$lim_i$表示字符串$T[1..i]$能在$S$中匹配到的最长后缀(即$T[i-lim_i+1,i]$是$S 阅读全文
posted @ 2018-09-20 18:12 bztMinamoto 阅读(1344) 评论(2) 推荐(6)
摘要:传送门 这题思路太清奇了……->题解 阅读全文
posted @ 2018-09-14 21:02 bztMinamoto 阅读(443) 评论(0) 推荐(1)
摘要:传送门 好像用SAM写的很少诶…… 其实我一开始也没想到要用SAM的……主要是没有想到找的时候可以dfs…… 首先建一个SAM,然后跑一遍dfs,枚举一下下一位,如果相同直接继续,否则就花费一次次数来改变它,保证改变次数小于等于3就行了 阅读全文
posted @ 2018-09-13 21:17 bztMinamoto 阅读(111) 评论(0) 推荐(0)
摘要:传送门 统计单词出现次数……为啥大家都是写AC自动机的嘞……明明后缀自动机也能做的说…… 统计出现次数这个就直接按长度排序然后做个dp就好,这是SAM的板子的要求啊,不提了 然后考虑怎么让所有串之间隔开。本来打算建个广义SAM后来发现没办法处理子串重复的情况……然后就按题解里的方法在每两个串之间加入 阅读全文
posted @ 2018-09-13 14:33 bztMinamoto 阅读(163) 评论(0) 推荐(0)
摘要:题意 给你一个串 $S$ 以及一个字符串数组 $T[1..m]$ , $q$ 次询问,每次问 $S$ 的子串 $S[p_l..p_r]$ 在 $T[l..r]$ 中的哪个串里的出现次数最多,并输出出现次数。如有多解输出最靠前的那一个。 题解 神仙题……虽然的确是好题……然而码量好大……好麻烦……因为 阅读全文
posted @ 2018-08-14 16:06 bztMinamoto 阅读(266) 评论(0) 推荐(0)
摘要:题意翻译 给出一个长度为$n$的字符串$s[1]$,由小写字母组成。定义一个字符串序列$s[1....k]$,满足性质:$s[i]$在$s[i-1]$ $(i>=2)$中出现至少两次(位置可重叠),问最大的$k$是多少,使得从$s[1]$开始到$s[k]$都满足这样一个性质。 题解 看了一个中午的代 阅读全文
posted @ 2018-08-14 13:57 bztMinamoto 阅读(412) 评论(0) 推荐(0)
摘要:题意 定义一个字符串的「独特值」为只属于该字符串的本质不同的非空子串的个数。如 "amy" 与 “tommy” 两个串,只属于 "amy" 的本质不同的子串为 "a" "am" "amy" 共 3 个。只属于 "tommy" 的本质不同的子串为 "t" "to" "tom" "tomm" "tomm 阅读全文
posted @ 2018-08-14 11:15 bztMinamoto 阅读(354) 评论(0) 推荐(0)
摘要:题目描述 在虐各种最长公共子串、子序列的题虐的不耐烦了之后,你决定反其道而行之。 一个串的“子串”指的是它的连续的一段,例如bcd是abcdef的子串,但bde不是。 一个串的“子序列”指的是它的可以不连续的一段,例如bde是abcdef的子串,但bdd不是。 下面,给两个小写字母串A,B,请你计算 阅读全文
posted @ 2018-08-13 21:38 bztMinamoto 阅读(260) 评论(0) 推荐(0)
摘要:题目大意:给出n个原串,再给出m个查询串。求每个查询串出现在了多少原串中。 题解 直接对原串建一个广义SAM,然后把每一个原串放到SAM上跑一跑,记录一下每一个状态属于多少个原串,用$size$表示。这样的话查询串直接在SAM上跑,如果失配输出0,否则直接输出记录在上面的$size$就好了。 阅读全文
posted @ 2018-08-13 20:24 bztMinamoto 阅读(253) 评论(0) 推荐(0)
摘要:Description a180285幸运地被选做了地球到喵星球的留学生。他发现喵星人在上课前的点名现象非常有趣。 假设课堂上有N个喵星人,每个喵星人的名字由姓和名构成。喵星球上的老师会选择M个串来点名,每次读出一个串的时候,如果这个串是一个喵星人的姓或名的子串,那么这个喵星人就必须答到。 然而,由 阅读全文
posted @ 2018-08-13 11:33 bztMinamoto 阅读(437) 评论(0) 推荐(1)

Live2D