0%

bitset

bitset

bitset

存一下用法

1
2
3
4
5
6
__builtin_popcount (x);    //二进制1的个数(uint)
__builtin_popcountll (x); //ulonglong
__builtin_parity(x); //1的个数的奇偶性
__builtin_ctz(x); //二进制末尾0的个数
__builtin_clz(x); //二进制开头0的个数
31-__builtin_clz(x); //log2x下取整
1
2
3
4
5
6
7
8
9
10
11
12
13
14
bitset<N>a;  //压位存储 bool a[1000];
a[i]=...; //支持下标访问,a[i]=0/1
a.any(); //是否存在1
a.none(); //是否无1
a.count(); //统计1的个数
a.set(); //全变为1; a.set(x); //把第x位变为1
a.reset(); //全变为0; a.reset(x); //把第x位变为0
a.flip(); //全部翻转; a.flip(x); //把第x位翻转
//以下这两个不一定有
_Find_first(); //找到第一个1的位置
_Find_next(); //找到下一个1的位置

(unsigned ll*)&a; //转成ll数组
a.to_string(); //

例题

BZOJ 3687 简单题

f[i][j]:前 i 个数,和为 j 的方案数

f[i][j]=f[i-1][j]^f[i-1][j-a[i]]

dp 的类型是 bool -> bitset 优化image-20220921104814473

DAG计数

image-20220921105123407

image-20220921105545152

BZOJ 4503,两个串

image-20220921111416637

k维数点

image-20220921111804143