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 中国大陆许可协议进行许可。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
【推荐】2025 HarmonyOS 鸿蒙创新赛正式启动,百万大奖等你挑战
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步