bitset专题
bitset
bitset前身:普通状态压缩的优化
以cf937G为例,对于邻接矩阵的由二维压缩到一维
floyd求可达性传递闭包
Solution:初步做法:首先本题只需要求所有偏序关系,考虑建图的时候只建单向图。朴素floyd是 的本题n是1e3显然无法通过,考虑过程中我们只需要维护01的信息,我们考虑使用bitset的过程将与的过程优化
听dmy学习记录
常用位运算函数
bzoj3687https://hydro.ac/d/bzoj/p/3687
题意:求所有子集和的异或和
Solution:首先我们不可能枚举所有子集,所以我们只能考虑dp。 考虑前i个数,子集和为j的方案,考虑最后需要全部异或起来,偶数方案数直接抵消
因此只需要维护奇偶性,所以我们考虑背包运算中异或,但是现在值域总和2e6,1000个数,显然过不去
考虑bitset优化背包,可达性01用的。由于本题只需要看%2的情况,所以同理也可以使用。时间复杂度:
SDUT2023校赛https://acm.sdut.edu.cn/onlinejudge3/contests/4098/problems/O
题意:给定一个集合1-n。求所有子集和的乘积.(n<=200)
Solution:考虑值域和数据个数,可以直接dp。 表示考虑前i个数,和为j的方案数。假设先不取模,我们继续考虑下去。最后统计答案的时候的每次算乘积算的是 。!注意注意注意。dp数组是作为指数出现的,所以我们不能直接对其mod取模。考虑费马小定理,这种指数乘积在mod是质数的时候是以mod-1为周期的,所以我们dp的时候应当对mod-1取模。
DAG计数: 的解法
题意:有向无环图,输入都是小向大连边,求出每个点能到达多少点?
Solution:考虑如果u到v有边,那么v所能到达的点u也能到达,直接利用bitset的或运算就可以完成。f[u]|=f[v]
检查时间:50000*50000/64=4e7
计算空间:50000*50000/8/1024/1024=298MB(bit->byte->kb->MB)
bitset还可以解决解决三元环计数,求传递闭包。思路都是枚举两个点,将枚举第三点的耗时从
三元环计数详情见该专题
bitset解决动态带修字符串匹配
https://hydro.ac/d/bzoj/p/4503 带通配符的字符串匹配
题意:给长串s,模式串t,t中含有?作为通配符,求s中t出现了几次,分别在哪开始?
Sol:考虑有通配符不好用kmp做,有FFT做法,待补。利用bitset的思想是维护s中每个位置作为起点是否可行。对于t中字母 t[j]
,对于s中所有不为这个字母的位置i,则i-j一定无法作为起点,我们利用bitset可以对于每个j花费 的时间完成这个处理。
实现:提前开26个bitset预处理每个字母在s的哪些位置出现过。每次遇到一个 t[j]
就右移j位对应bitset
多次区间查询给出原串,模式串保持不变,且动态带修。http://codeforces.com/problemset/problem/914/F
给你一个字符串
-
1 i c
:将字符串 的第 项变为字符 。 -
2 l r y
:求字符串 在字符串 中以第 项为起点,以第 项为终点的子串(第 和第 项)中作为子串出现的次数。
Sol:考虑对于区间查询转化为后缀查询,利用bitset的移位性质,先得到L-n的子串个数,再得到r+1-n的子串个数,做差即可。我们考虑依旧采用上面的思想,维护每个字符的出现位置。利用模式串不断筛选可用的起点,最后为1的位置就是可用的起点。
时间复杂度:
根号分治bitset+滑动窗口http://codeforces.com/problemset/problem/963/D
给你一个字符串
保证
CF963D Frequency of String 题解 - 洛谷专栏 (luogu.com.cn)
Sol:首先考虑对于每个模式串预处理出在远传s中所有可行的endpos,处理手法与上面一样,上面预处理的起点,这里用终点,为了不糊涂改用1_index了,本质一样。我们考虑统计答案的复杂度,直接一想似乎是 的无法通过,但注意到题目说每个模式串不同,且总长度不超过1e5,经典根号分治,不同长度的串一定不超过 ,对于固定长度的串可行endpos的个数是线性的,所以统计答案复杂度是
预处理: 100000*100000/64=1.5e8
总结:对于以上字符串匹配需要注意的细节:下标移动和边界的计算(可以设未知数)。不合法情况导致越界需要提前特判退出。最后一题那个找1的上界没想清楚
bitset配合莫队在数据结构方面的应用
__EOF__

本文作者:爱飞鱼
本文链接:https://www.cnblogs.com/mathiter/p/18199406.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/mathiter/p/18199406.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!