"a" String Problem

少转一个 int128 痛失一题 /fn

Hint 1. 如果确定了一个正整数 和一个从 的字符 ,最多有多少个符合题目要求的 的子串 满足

显然只有一种。假设有两个,那一个肯定会与另一个失配。这启示我们,可以按照首字母分类,对于每个 的首字母每种长度仅尝试匹配第一个即可。


Hint 2. 要检查一个串 ,可以使用哈希 地判断两个子串是否相等。那么我们最多需要匹配多少次?

我采用的做法是,维护出每个字母在串中出现的位置。假设某字符在串中第一次出现在下标 ,使用哈希检查 是否相等,若失配直接跳出,否则只需要继续检查下标 后面的内容就好了,二分维护(注意,此处使用类似 Python 切片的语法表示的子串)。除了维护子串是否相等,也别忘了顺手判一下两个串之间的区域是否只有字母

对于子串 ,我们最多仅需匹配 次,带上二分的复杂度为 。从 枚举 ,总复杂度为


Hint 3. 前面我们仅处理了开头为 的串。对于 打头的该怎么处理?

特殊处理全部为 的子串。剩余情况下,任何一个符合要求的、以 打头的子串都可以看成“若干个 ”与“以其他字母打头的合法子串”直接拼接而成。检查某个串时,顺手记录一下位置信息,最终前面可以包含的 字符数量,就是


我这是不是重工业做法 https://codeforces.com/contest/1984/submission/265866366

posted @ 2024-06-21 19:43  MrPython  阅读(10)  评论(0)    收藏  举报  来源