标签:判断 inline 元素 code 交集 表示 集合 block math
0
1<<i
(1<<n)-1
if(S>>i&1)
S|1<<i
S&~(1<<i)
S|T
S&T
枚举\(\{0,1,...,n-1\}\)的所有子集:
for(int S=0;S<1<<n;S++){ //对子集的处理 }
枚举 sup 的所有子集:
int sub=sup; do{ //对子集的处理 sub=(sub-1)⊃ }while(sub!=sup); //-1&sup=sup结束循环
枚举\(\{0,1,...,n-1\}\)的所有子集大小为 k 的集合的方法:
int comb=(1<<k)-1; while(comb<1<<n){ //对集合的处理 int x=comb&-comb,y=comb+x; comb=((comb&~y)/x>>1)|y; }
①
x&(-x)
的值就是将其最低位的1独立出来后的值②
y=comb+x
就是将 comb 从最低位的1开始的连续的1都置0了③
z=comb&-y
得到了最低位1开始的连续区间④
z/x
可以将 z 不断右移,直到最低位为1
标签:判断 inline 元素 code 交集 表示 集合 block math
原文地址:https://www.cnblogs.com/CADCADCAD/p/12250311.html