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)这个位置不能多出一个循环节的话,说明左边也匹配不上,没必要再匹配了

  • 相关阅读:
    BeautifulSoup_第一节
    第一个python爬虫——保存淘宝mm图片
    面试题:css(一)
    面试:HTML(二)
    websocket
    面试题:HTML篇(一)
    HTML5遗忘知识点(一)
    webpack热更新原理
    webpack按需加载
    什么是process.env?
  • 原文地址:https://www.cnblogs.com/knife-rose/p/12346345.html
Copyright © 2011-2022 走看看