zoukankan      html  css  js  c++  java
  • [HNOI2019]JOJO

    [HNOI2019] JOJO

    传送门

    Luogu

    Solution

    这题真的难(.
    首先考虑没有(2)限制的子问题:
    将原串变成((x,c))二元组形成的串,考虑一个前缀和一个后缀的匹配,中间的字符都要配上,然后首尾只要求字符相同.

    • 考虑如果中间有一个((x',c) (x'>x))(nxt)位置造成的影响显然是直接归(0),因为你无论怎样无法比这个((x',c))串长.

    然后直接跳(next)就可以了,每一次增加的是一个等差数列.

    如果有了(2)的限制,显然是可以放到树上去做.
    但由于(kmp)的复杂度是均摊的,所以无法保证上树的复杂度.
    考虑维护(kmp)自动机,现在你一个字符变成了((x,c)),可以对于每一个(c)把对应(x)(kmp)自动机建出来,维护需要跳到的(next)位置和增加的答案.
    上述操作可以通过主席树维护.
    可能我也讲的不是很清楚.

    代码

    Code

  • 相关阅读:
    《代码大全2》阅读笔记02
    《代码大全2》阅读笔记01
    第二阶段冲刺第六天
    学习进度5
    构建之法阅读笔记03
    地铁进度记录
    学习进度4
    个人数组
    学习进度3
    构建之法阅读笔记02
  • 原文地址:https://www.cnblogs.com/fexuile/p/12355002.html
Copyright © 2011-2022 走看看