bitset 学习笔记

引入

顾名思义, bitset 是用 bit 组成的 set;
区别于普通的 bool []vector<bool>bitset 的每一位都用一 bit 的内存来存储,而非一 byte
故, bitset 总是用来卡常。

正题

首先一些介绍一些基础用法:

用法

一些初始化

  • bitset<M> Name:长度为 Mbitset,默认为空。(M 为常量,下同)
  • bitset<M> Name(N):长度为 Mbitset,初始化为 int 类型的变量 N 的二进制。
  • bitset<M> Name(S):长度为 Mbitset,初始化为 string 类型的 01 字符串 S

一些运算符重载

  • operator [] (int i):返回 bitset 的第 i 位,但是从右往左数。
  • operator < (bitset<N> b):返回两 bitset
  • operator > (bitset<N> b):同上。
  • operator << (int t)
  • operator >> (int t)
  • operator & (bitset<N> b)
  • operator | (bitset<N> b)
  • operator ~ ()
  • operator ^ (bitset<N> b)

好吧后面的不想写了,自行脑补()

直接例题。

例题

AT_agc020_c

考虑将所有集合的和都存进一个 bitset 里,如果 Bit[i] != 0 那么就代表存在一个集合的和为 i

那么可以这样写:

Bit[0] = 1;
for (int i = 1; i <= n; i++) {
	cin >> tmp;
	Bit |= (Bit << tmp);
}

P4306

我们充分发扬人类智慧:

用 bitset 优化 Floyd,n2 枚举两点,如果两点联通则将两点可达的所有点取并集。

这样速度快得飞起,在 n=2000 时都可以在 138ms 内卡过

CF620E

说实话这道题用 bitset 硬往树剖上扣就可以了,不再赘述。

posted @   Archippus  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示