• [JSOI2019]节日庆典


    题意

    洛谷

    做法

    先来说个暴力
    从前往后枚举(k=(1,2,...,n))
    我们维护这样一个集合(P_k),集合内任意两个元素(i,j(i<j)),满足( ext{lcp}(S[i:],S[j:])ge k-j+1),即有可能在(ge k)的前缀中成为答案的集合

    考虑从(P_{k-1})过渡到(P_k)

    • 初始化(P_{k}=P_{k-1}cup {k})
    • 不断加入元素,比较与末尾元素的大小关系,修正集合

    最后,对(P_k)中选出最小的即可,比较两元素(i,j),发现需要做的事均为比较某前缀与后缀的( ext{lcp}),可以通过( ext{exkmp})(O(1))计算

    这样总复杂度是(O(sumlimits_{i=1}^n |P_i|))

    考虑优化

    考虑(i<j),比较不出大小,即(lcp(S_i,S_j)ge k-j+1)
    (k-j+1ge j-i),即前缀(k)形如(ABBC)(C)(B)的前缀,(i)在第一个(B)开头,(j)在第二个(B)开头
    (S_i=BBCA)(S_j=BCAB)(S_{j+(j-i)}=CABB)

    • (BCAle CAB),有(S_ile S_jle S_{2i-j})
    • (BCAge CAB),有(S_ige S_jge S_{2i-j})
      因此若出现(k-j+1ge j-i),则可以丢弃({j}),故有(j-i>k-j+1),容易得到(|P_k|)(O(logk))

    所以总复杂度为(O(nlogn))

  • 相关阅读:
    前端的一些小的效果
    数组排序
    查看字符串中出现次数最多的字符以及出现的次数
    让元素垂直水平居中的方式
    MySQL
    数组_集合转换
    Spring_使用(JDBC)
    Spring_Aop基于配置文件
    Spring_Aop_(二)
    Spring_总结
  • 原文地址:https://www.cnblogs.com/Grice/p/12682287.html
Copyright © 2020-2023  润新知