1 条题解

  • 0
    @ 2025-8-24 23:07:39

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Falashiro
    丝之歌什么时候出

    搬运于2025-08-24 23:07:39,当前版本为作者最后更新于2024-12-24 00:08:51,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    若要求风景序列 A 在风景序列 B 中的出现次数,则可以每次找到 B 中出现的第一个 A 并在它之后分割,正确性显然。

    对于一个序列长度 ll,考虑以 Θ(n)\Theta(n) 的时间复杂度求出所有 mi=lm_i=l 的询问的答案。

    将询问离线,对于所有 mi=lm_i=l 的询问,对询问的序列做哈希,并将其哈希值存入哈希表中。我们 dfs 原树,在 dfs 过程中设 fif_i 表示第 ii 次的询问的序列在 11 号点到当前节点的路径上的出现次数,gig_i 表示上一次 fif_i 变化的节点。对于一个节点,可以求出以它为末尾的长度为 ll 的序列的哈希值,若与第 ii 次询问的序列的哈希值相同,则可以根据 gig_i 与当前节点的深度差判断是否可以更新 fif_i,若 fif_i 更新,则同时更新 gig_i 与询问答案。dfs 回溯时,需同时回溯 ffgg。于是我们得到了一个时间复杂度为 Θ(n)\Theta(n) 的处理相同长度的询问的算法。

    M=mM=\sum m,注意到不同的询问长度至多为 M\sqrt M 级别,于是对于每个出现的长度执行以上算法即可。时间复杂度为 Θ(nM)\Theta(n\sqrt M),空间复杂度为 Θ(n)\Theta(n)

    • 1

    信息

    ID
    11051
    时间
    4000ms
    内存
    64MiB
    难度
    6
    标签
    递交数
    0
    已通过
    0
    上传者