↓ Skip to main content
  1. Posts/

acm 奇技淫巧 bitset

·451 words·1 min
Note: This article is available in Chinese only. 本文暂无英文版本。 View original

1.定义与初始化 在定义 bitset 时,要明确 bitset 有多少位,这个位数是整形常量

(tips:如果长度和输入的数m有关,在做翻转操作以后再统计时候会多算,一个可以的做法是设置一个长度为m,所有位上都是1的位串,然后翻转之后先与一下。类似的技巧还有很多。)

() bitset b; //b 有 n 位,每位都是 0 bitset b(u); //b 是 unsigned long 型 u 的一个副本 bitset b(s); //b 是 string 对象 s 中含有的位串的副本,这个s 必须是位串,也就是二进制码串 bitset b(s, pos, n); //b 是 s 中 从位置 pos 开始的 n 个位的副本

2.bitset 的操作 b.any() //b 中是否存在置为 1 的二进制位? b.none() // 和b.any() 效果一样 b.count() //b 中不存在置为 1 的二进制位吗?

b.any() //b中存在置为1的二进制位吗? b.size() //b 中置为 1 的二进制位的个数 b[pos] //访问 b 中在 pos 处二进制位 b.test(pos) //b 中在 pos 处的二进制位置为 1 b.set() // 把 b 中所有二进制位都置为 1 b.set(pos) //把 b 中在 pos 处的二进制位置为 1 b.reset() //把 b 中所有二进制位都置为 0 b.reset(pos) //把 b 中在 pos 处的二进制位置为 0 b.flip() //把 b 中所有二进制位逐位取反 b.flip(pos) //把 b 中在 pos 处的二进制位取反 b.to_ulong() //用 b 中同样的二进制位返回一个 unsigned long 值 os « b //把 b 中的位集输出到 os 流 示例:

cout « b « endl;

Related

线段树学习笔记

·141 words·1 min
嘛,终于下定决心搞定线段树了。 之前几次都是被lazy标记卡住,这次大概不会了吧2333