bitset学习笔记
bitset 本质上是一个二进制串,优点是时间和空间复杂度都带有 \(\frac{1}{w}\) 的常数。
成员函数:
b.set()
全部赋值为 \(1\)。b.reset()
全部赋值为 \(0\)。b.flip()
将每一位取反。b.count()
返回有多少个 \(1\)。b.any()
返回是否至少有一个 \(1\)。b.none()
返回是否全部为 \(0\)。
每个函数的复杂度都是 \(O(\frac{n}{w})\),其中 \(n\) 为 bitset 的长度,而 \(w\) 则是常数 \(32\) 或 \(64\)(不同环境下)。
bitset 支持按位与,按位或,按位异或,按位取反,左移右移,时间复杂度同样为 \(O(\frac{n}{w})\)。
技巧:
- 将 b 的 \(0 \sim x\) 位变为 \(0\):
b = (b >> x) << x;
- 只取 b 的 \(0 \sim x\) 位(\(N\) 为 bitset 总长度):
b = (b << (N - x)) >> (N - x);
应用:
本文作者:Creeper_l
本文链接:https://www.cnblogs.com/Creeperl/p/18394255
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步