洛谷 Codeforces 思路 最初的想法:后缀数组+区间众数,似乎并不能过. 既然后缀数组不行,那就按照套路建出广义SAM,然后把\(S\)放在上面跑,得到以每个点结尾会到SAM上哪个节点. 询问时对于\(p_r\)所在的节点,倍增往parent树上跳,找到包含\([p_l,p_r]\)的最小区间. 然后统计该节点\([l,r]\)的模式串中最多的是谁,用线段树合并实现. 好像就做完了? 特判 一般情况下,如果匹配到\(p_r\),那么\(S(p_l,p_r)\)一定时当前节点的祖先. 但有…
题意 给你一个串 $S$ 以及一个字符串数组 $T[1..m]$ , $q$ 次询问,每次问 $S$ 的子串 $S[p_l..p_r]$ 在 $T[l..r]$ 中的哪个串里的出现次数最多,并输出出现次数.如有多解输出最靠前的那一个. 题解 神仙题……虽然的确是好题……然而码量好大……好麻烦……因为一个sb错误调了一个下午 先膜一波zsy大佬……%%% 首先先把$T$给建出一个广义$SAM$.考虑每一个询问的$p_r$,如果在$SAM$上匹配到了一个节点,那么这个子串$S[p_l,p_r]$一定…
题面: 给你一个串S以及一个字符串数组T[1..m],q次询问,每次问S的子串S[p_l..p_r]在T[l..r]中的哪个串里的出现次数最多,并输出出现次数.如有多解输出最靠前的那一个. 分析: 第一次见这道题时,由于对算法十分陌生,就将其压进了任务计划,这一天又提到了这道题,这才算是重见天日. 数据结构题,越来越注重多种数据结构的搭配使用.搭配使用呢,我们就要知道各种数据结构的功能与适用范围,下面是这道题一个理想的思考过程(虽然我是抄的题解……) 首先,一个模式串的区间要在多个串上进行匹配,…
传送门 朴素想法:对\(M\)个匹配串\(T_1,...,T_M\)建立广义SAM,对于每一次询问,找到这个SAM上\(S[pl...pr]\)对应的状态,然后计算出对于每一个\(i \in [l,r]\),计算出\(T_i\)能够转移到这个状态的次数然后取\(max\). 需要解决两个问题: 1.如何快速找到\(S[pl...pr]\)在SAM上对应的状态. 因为题目没有给\(\sum pr - pl\)的条件,所以不能暴力,考虑一个一个字符加进去,每加入一个字符计算对应答案.将询问按照\(p…
[CF666E]Forensic Examination(后缀自动机,线段树合并) 题面 洛谷 CF 翻译: 给定一个串\(S\)和若干个串\(T_i\) 每次询问\(S[pl..pr]\)在\(T_l..T_r\)中出现的最多次数,以及出现次数最多的那个串的编号. 题解 好题啊. 我们对于所有的\(T\)串构建出广义后缀自动机之后 把\(S\)丢到\(SAM\)上匹配,对于每组询问, 相当于回答\(S[pl..pr]\)所代表的节点的\(right\)集合所代表的串的众数是哪个串,以及这个众数…
[BZOJ3413]匹配(后缀自动机,线段树合并) 题面 BZOJ 题解 很好的一道题目. 做一个转化,匹配的次数显然就是在可以匹配的区间中,每个前缀的出现次数之和. 首先是空前缀的出现次数,意味着你会去匹配第一个字符. 然后是第一个字符的出现次数,意味着你回去匹配前两个字符. 如此下去就是最后的答案. 那么构建\(SAM\)后线段树合并维护好每个点的\(endpos\). 然后对于询问串在\(SAM\)上跑一遍就好了. 注意下每个\(endpos\)的可行范围到底是哪里,以及最终整个询问串是不…
[CF666E]Forensic Examination 题意:给你一个字符串s和一个字符串集合$\{t_i\}$.有q个询问,每次给出$l,r,p_l,p_r$,问$s[p_l,p_r]$在$t_l...t_r$中的哪个字符串中出现的次数最多,以及最多次数是多少. $|s|\le 5\times 10^5,\sum |t_i|\le 5\times 10^4,q\le 5\times10^5$ 题解:我们对于$t_i$建立广义后缀自动机,并对于每个节点都维护:在它的right集合中,每个字符串…
题意: 给定一个串 $S$ 和若干个串 $T_{i}$每次询问 $S[pl..pr]$ 在 $Tl..Tr$ 中出现的最多次数,以及出现次数最多的那个串的编号. 数据范围: 需要离线 题解:首先,很常规的对 $T_{1}$ 到 $T_{rmax}$ 的所有字符串构建一个广义后缀自动机.来一遍线段树合并,合并的权值是每个 $T$ 串出现的次数. 合并完毕后,再广义后缀自动机上的每个点的线段树上都能查到有哪些串能覆盖当前串. 把询问按照右端点排序,将 $S$ 匹配到广义后缀自动机当中,并通过倍增来将…
E. Forensic Examination time limit per test:6 seconds memory limit per test:768 megabytes input:standard input output:standard output The country of Reberland is the archenemy of Berland. Recently the authorities of Berland arrested a Reberlandian sp…
CF 666E Forensic Examination 题意: 给出一个串\(s\)和\(n\)个串\(t_i\),\(q\)次询问,每次询问串\(s\)的子串\(s[p_l:p_r]\)在串\(t_l\)到\(t_r\)中哪个串中出现次数最多,以及出现次数最多的哪个串的下标 题解: 考虑把\(n\)个\(t\)串建出广义后缀自动机,然后后缀自动机上每个节点用动态开点线段树来维护每个\(t\)串能匹配到的数量,把每个\(t\)串的每个后缀能匹配的最长的串对应的后缀自动机上的点以当前\(t\)串…