关于 bitset 的一些题目
参考
- http://www.cplusplus.com/reference/bitset/bitset/
- https://blog.csdn.net/snowy_smile/article/details/79120063
bitset
bitset<MAXN> b;
b.any() // b中是否存在置为1的二进制位。
b.none() // b中是否不存在置为1的二进制位。
b.count() // b中置为1的二进制位的个数。
b.size() // b中二进制位数的个数。
b[pos] // 访问b中在pos处二进制位。
b.test(pos) // b中在pos处的二进制位置为1么?
b.set() // 把b中所有二进制位都置为1。
b.set(pos) // 把b中在pos处的二进制位置为1。
b.reset() // 把b中所有二进制位都置为0。
b.reset(pos) // 把b中在pos处的二进制位置置为0。
b.flip() // 把b中所有二进制位逐位取反。
b.flip(pos) // 把b中在pos处的二进制位取反。
b.to_ullong() // 返回一个有相同二进制位的 unsigned long long 类型的值。
想法
一般先考虑题目的暴力做法,如果复杂度有 1e9 ,这时候就可能考虑 bitset 优化,一般题目中的关系类似于能不能?是不是?这种,或者可以用 bitset 优化 DP(背包 DP 比较多,或者用于记录路径之类) ,一个有趣的应用是对于一些字符串问题,字符串长度不长,但是动态更新,询问次数很多的情况,可以维护 bitset 进行快速求解。
题目
- Triatrip
- Bipartite Graph 显然二分图两边点数要尽可能相同,考虑 01背包DP, bitset 优化,二进制位 i 表示是否能构成点数量为 i 的一边。
- Addition on Segments 先进行类似于线段树的更新操作,然后用 bitset 加速状态转移。
- Explosion bitset 加速传递闭包的计算。
- Eighty seven 考虑前缀后缀,开两个 bitset 类型的 DP 数组,以前缀为例,dp[i][j][k] 表示到第 i 个数,一定不选 j 这个位置上的数,选了 k 个数时所有可能的和(二进制位为1表示有这样的和)。对于后缀的数组,如果二进制位 i 上的数字为1,可修改为 bit[87−i]=1,那么对于询问,枚举 k ,将前缀后缀按位与,检查是否有二进制位为1。
- Price List Strike Back
- Judgement 01背包 DP,bitset 记录路径。
- 带可选字符的多字符串匹配 bitset 加速匹配。预处理不同字符可能出现的集合,如果到主串上的第 i 个字符,有 bit[j]=1 表示已经匹配了长度为 j 的模板串。bit<<1 等价于加入一个新的字符,利用前面的预处理可以判断转移是否合法(按位与),若不合法则对应的二进制位会变成 0。
- The Values You Can Make 背包 DP 。
- La Vie en rose bitset 优化字符串匹配。
- Nearest Maintenance Point 在最短路搜索的过程中使用 bitset 记录信息,表示从哪些点到当前点有最短路。
- Rikka with Candies 离线查询。由于 a%b=k, 0≤k<b,我们可以从大到小枚举这个 k ,统计答案,然后更新 bitset 中 k 的倍数。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2017-07-11 818E - Card Game Again(尺取法)