"a" String Problem
少转一个 int128 痛失一题
Hint 1. 如果确定了一个正整数 和一个从 到 的字符 ,最多有多少个符合题目要求的 的子串 满足 且 ?
显然只有一种。假设有两个,那一个肯定会与另一个失配。这启示我们,可以按照首字母分类,对于每个 到 的首字母每种长度仅尝试匹配第一个即可。
Hint 2. 要检查一个串 ,可以使用哈希 地判断两个子串是否相等。那么我们最多需要匹配多少次?
我采用的做法是,维护出每个字母在串中出现的位置。假设某字符在串中第一次出现在下标 ,使用哈希检查 与 是否相等,若失配直接跳出,否则只需要继续检查下标 后面的内容就好了,二分维护(注意,此处使用类似 Python 切片的语法表示的子串)。除了维护子串是否相等,也别忘了顺手判一下两个串之间的区域是否只有字母 。
对于子串 ,我们最多仅需匹配 次,带上二分的复杂度为 。从 到 枚举 ,总复杂度为 。
Hint 3. 前面我们仅处理了开头为 到 的串。对于 打头的该怎么处理?
特殊处理全部为 的子串。剩余情况下,任何一个符合要求的、以 打头的子串都可以看成“若干个 ”与“以其他字母打头的合法子串”直接拼接而成。检查某个串时,顺手记录一下位置信息,最终前面可以包含的 字符数量,就是 。
我这是不是重工业做法
https://codeforces.com/contest/1984/submission/265866366