zoukankan      html  css  js  c++  java
  • 后缀数组刷题小结

    大鸽子终于来更博客了

    hihocoder后缀数组1

    二分法:

    显然答案满足单调性,所以我们选择二分答案

    我们把(height)数组中小于(mid)的数全部去掉,这样会把(height)数组分成若干个连续段,然后检查一下有没有一个连续段超过了(k)个数字

    并查集法:

    先将所有(height)的下标按照(geight)数组值大小排序,每次将最大的两个集合合并,当集合内数量超过(k)个时,当前合并的值就是答案

    大鸽子是不会贴代码的

    hihocoder后缀数组2

    二分答案,然后康康是否在某一组里面有两个起点之间的距离相差大于(mid)

    hihocoder后缀数组3

    两个串拼起来跑后缀数组,二分答案,然后康康是否某一组里面有起点分别位于两个串

    hihocoder后缀数组4

    (b)题目在说个机八,据说是求重复次数最多的连续子串

    我们有一个暴力:枚举循环节的长度,然后求(lcp(i,i+len))就可以知道循环次数啦!,复杂度(O(n^2))

    考虑某个玄学的优化:对于枚举的循环节长度(len),只枚举(len)的倍数的位置

    (tmp=lcp(i,i+len))

    更新答案的时候额外更新一个:(frac{lcp(i-len+tmp\%len,i+tmp\%len)}{len}+1)

    为什么呢,因为如果在(i-len+tmp%len)右边的起始位置,因为(tmp)除去循环节多余出来的那部分根本没有那么长,不可能多凑出一个循环节

    而如果(i-len+tmp%len)这个位置不能多出一个循环节的话,说明左边也匹配不上,没必要再匹配了

  • 相关阅读:
    简易计算机
    作业-继承
    exception
    作业-窗口
    作业-数字
    作业8
    作业9-1
    作业9-2
    book
    成绩录入
  • 原文地址:https://www.cnblogs.com/knife-rose/p/12346345.html
Copyright © 2011-2022 走看看