Bitset 乱搞字符串匹配

见 Alex 巨佬强调“正解做法”,遂作文以记之。https://www.cnblogs.com/alex-wei/p/bitset_yyds.html

CF914F Substrings in a String

首先差分,f(l+|t|1)f(r+1)。这里 f(i) 表示 t 在原串的 i 位置结尾前面的匹配答案,即 endpos 在 [i,n] 中。

我们对 S 的每个【字符】开一个 bitset,记录这个字符在 S 中的出现位置。

每次匹配新建一个 bitset M,将其与 T 串中的【每一个元素在 S 中的 bitset 通过移位维护的位置关系形成的新的 bitset】进行与运算。

容易发现如果这样还有 1 位置,那一定就合法了。

容易发现这就是暴力匹配的过程,所以复杂度为 O(|S||T|w)105 秒了。也可以骗到很多分(((

ps:还没搞懂 bitset。

ps:搞懂了,记住 bitset 是从右向左的就行。记住 set, reset, flip, >>, <<。

CF963D Frequency of String

注意不同子串的那个根号和结论即可验证 bitset 做法正确性了,是线性根号 + bitset 暴力。

然后就是在暴力找位置的时候记住 _Find_first()_Find_next(i) 函数。

posted @   LCat90  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示