• 字符串


    Chapter1

    字符串hash

    T1

    求字符串最短循环节

    sol:看n - fail[n]是不是n的约数...这需要hash?

    T2

    求字符串所有border长度

    sol:第一个border,fail[n],第二个border,fail[fail[n]],一路fail下去让它fail到0...这需要hash?

    T3

    有一个字符串,把它复制一遍,中间插一个字符

    现在给你如此操作之后的串,让你求原串

    sol:hash 枚举插进去的字符位置,看前面后面一不一样

    T4

    多次询问一个字符串某个子串的最短循环节

    sol:发现最短循环节一定是子串长度的约数

    于是质因数分解直接hash做

    T5

    Zxl有一次决定制造一条项链,她以非常便宜的价格买了一长条鲜艳的珊瑚珠子,她现在也有一个机器,能把这条珠子切成很多块(子串),每块有k(k>0)个珠子,如果这条珠子的长度不是k的倍数,最后一块小于k的就不要拉(nc真浪费),保证珠子的长度为正整数。 Zxl喜欢多样的项链,为她应该怎样选择数字k来尽可能得到更多的不同的子串感到好奇,子串都是可以反转的,换句话说,子串(1,2,3)和(3,2,1)是一样的。写一个程序,为Zxl决定最适合的k从而获得最多不同的子串。 例如:这一串珠子是: (1,1,1,2,2,2,3,3,3,1,2,3,3,1,2,2,1,3,3,2,1), k=1的时候,我们得到3个不同的子串: (1),(2),(3) k=2的时候,我们得到6个不同的子串: (1,1),(1,2),(2,2),(3,3),(3,1),(2,3) k=3的时候,我们得到5个不同的子串: (1,1,1),(2,2,2),(3,3,3),(1,2,3),(3,1,2) k=4的时候,我们得到5个不同的子串: (1,1,1,2),(2,2,3,3),(3,1,2,3),(3,1,2,2),(1,3,3,2)

    sol:我们惊喜的发现,枚举k暴力计算的复杂度是调和级数,就是渐进$n imes ln n$的 于是直接暴力

    T6

    对于一个01串,如果把它01取反再反过来后与原串一样,就称它是反对称的,求一个串有多少子串是反对称的

    sol:我们ManACher,把判断条件改成加起来等于1就珂以了

    后面两道map裸题略

    KMP

    T3

    求字符串中所有"A + B + A"的数量

    sol:枚举起点做KMP

    暴力往fail跳直到border长度小于n/2

    T4

    有一个S串和一个T串,长度均小于1,000,000,设当前串为U串,然后从前往后枚举S串一个字符一个字符往U串里添加,若U串后缀为T,则去掉这个后缀继续流程。

    sol:开个栈模拟一下

  • 相关阅读:
    转载一篇不错的Mac上安装Apache和多版本PHP的文章
    Mac 上配置tomcat 及可能碰到的问题。
    iOS通知中心 NSNotificationCenter详解
    字符缓冲区读取文件BufferedReader
    BufferedWriter—newLine
    缓冲流复制文件与基本流复制文件比较
    BufferedOutputStream缓冲流
    properties集合
    JDK7,JDK9流中异常的处理
    try-catch-finally处理流中的异常
  • 原文地址:https://www.cnblogs.com/Kong-Ruo/p/9354344.html
Copyright © 2020-2023  润新知