关于 bitset 的一些题目
参考
- http://www.cplusplus.com/reference/bitset/bitset/
- https://blog.csdn.net/snowy_smile/article/details/79120063
bitset
bitset<MAXN> b;
b.any() // b中是否存在置为1的二进制位。
b.none() // b中是否不存在置为1的二进制位。
b.count() // b中置为1的二进制位的个数。
b.size() // b中二进制位数的个数。
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_ullong() // 返回一个有相同二进制位的 unsigned long long 类型的值。
想法
一般先考虑题目的暴力做法,如果复杂度有 \(1e9\) ,这时候就可能考虑 \(bitset\) 优化,一般题目中的关系类似于能不能?是不是?这种,或者可以用 \(bitset\) 优化 \(DP\)(背包 \(DP\) 比较多,或者用于记录路径之类) ,一个有趣的应用是对于一些字符串问题,字符串长度不长,但是动态更新,询问次数很多的情况,可以维护 \(bitset\) 进行快速求解。
题目
- Triatrip
- Bipartite Graph 显然二分图两边点数要尽可能相同,考虑 01背包DP, \(bitset\) 优化,二进制位 \(i\) 表示是否能构成点数量为 \(i\) 的一边。
- Addition on Segments 先进行类似于线段树的更新操作,然后用 \(bitset\) 加速状态转移。
- Explosion \(bitset\) 加速传递闭包的计算。
- Eighty seven 考虑前缀后缀,开两个 \(bitset\) 类型的 \(DP\) 数组,以前缀为例,\(dp[i][j][k]\) 表示到第 \(i\) 个数,一定不选 \(j\) 这个位置上的数,选了 \(k\) 个数时所有可能的和(二进制位为\(1\)表示有这样的和)。对于后缀的数组,如果二进制位 \(i\) 上的数字为\(1\),可修改为 \(bit[87-i]=1\),那么对于询问,枚举 \(k\) ,将前缀后缀按位与,检查是否有二进制位为\(1\)。
- Price List Strike Back
- Judgement 01背包 \(DP\),\(bitset\) 记录路径。
- 带可选字符的多字符串匹配 \(bitset\) 加速匹配。预处理不同字符可能出现的集合,如果到主串上的第 \(i\) 个字符,有 \(bit[j]=1\) 表示已经匹配了长度为 \(j\) 的模板串。\(bit<<1\) 等价于加入一个新的字符,利用前面的预处理可以判断转移是否合法(按位与),若不合法则对应的二进制位会变成 \(0\)。
- The Values You Can Make 背包 \(DP\) 。
- La Vie en rose \(bitset\) 优化字符串匹配。
- Nearest Maintenance Point 在最短路搜索的过程中使用 \(bitset\) 记录信息,表示从哪些点到当前点有最短路。
- Rikka with Candies 离线查询。由于 \(a \% b = k\), \(0\leq k < b\),我们可以从大到小枚举这个 \(k\) ,统计答案,然后更新 \(bitset\) 中 \(k\) 的倍数。
关于 bitset 的一些题目的更多相关文章
- C++ STL bitset总结
基础用法 C++ Reference 神犇博客 余下的就是例题了 [BZOJ3687]简单题 考虑\(DP\),设\(f[i][j]\)表示前\(i\)个元素的算数和为\(j\)的子集个数,有: \[ ...
- 浅析 c++ bitset 的用法
浅析 c++ bitset 的用法 总述 C++的 \(bitset\) 位于 <bitset> 头文件中,这是一种类似于数组的数据结构,每个位置存储 \(0\ or\ 1\) ,并且每个 ...
- bitset 相关题目
std::bitset 的语法就不搬运了, 直接看题吧 #515. 「LibreOJ β Round #2」贪心只能过样例 题意: 给出 n 个数 \(x_i\), 每个数的取值范围为 \([a ...
- DFS序+线段树+bitset CF 620E New Year Tree(圣诞树)
题目链接 题意: 一棵以1为根的树,树上每个节点有颜色标记(<=60),有两种操作: 1. 可以把某个节点的子树的节点(包括本身)都改成某种颜色 2. 查询某个节点的子树上(包括本身)有多少个不 ...
- (DFS、bitset)AOJ-0525 Osenbei
题目地址 简要题意: 给出n行m列的0.1矩阵,每次操作可以将任意一行或一列反转,即这一行或一列中0变为1,1变为0.问通过任意多次这样的变换,最多可以使矩阵中有多少个1. 思路分析: 行数比较小,先 ...
- Gym 100917J---Judgement(01背包+bitset)
题目链接 http://codeforces.com/gym/100917/problem/J Description standard input/outputStatements The jury ...
- 74 使用BitSet输出数组中的重复元素
[本文链接] http://www.cnblogs.com/hellogiser/p/using-bitset-to-print-duplicate-elements-of-array.html [题 ...
- Codeforces Gym 100342J Problem J. Triatrip 求三元环的数量 bitset
Problem J. Triatrip Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100342/at ...
- ACM题目————A simple problem
Description Zty很痴迷数学问题..一天,yifenfei出了个数学题想难倒他,让他回答1 / n.但Zty却回答不了^_^. 请大家编程帮助他. Input 第一行整数T,表示测试组 ...
随机推荐
- 哪些window你不知道的却实用的小技巧----window小技巧
前言 一直想要整理一篇有关于window比较全的使用小技巧,却又不知道从哪里开始写起.而让我准备动手写这边随笔的动力,还是在加入虫部落<一个绿色环保,充满朝气的好地方>,从大家的分享中,我 ...
- 分治思想 特别常用 Codeforces Beta Round #80 (Div. 1 Only) D
D. Time to Raid Cowavans time limit per test 4 seconds memory limit per test 70 megabytes input stan ...
- 动态规划:插头DP
这种动归有很多名字,插头DP是最常见的 还有基于连通性的动态规划 轮廓线动态规划等等 超小数据范围,网格图,连通性 可能算是状态压缩DP的一种变式 以前我了解的状压DP用于NP难题的小数据范围求解 这 ...
- [php]禁用缓存
header("Expires: -1"); header("Cache-Control: no_cache"); header("pragma: n ...
- [php]修改站点的虚拟目录
wamp默认的站点的目录是www的目录,可以修改appache的httpd.conf文件来修改目录,修改方法如下: 1. <Directory "D:/SoftWare/wamp/ww ...
- 【BZOJ】1076 [SCOI2008]奖励关 期望DP+状压DP
[题意]n种宝物,k关游戏,每关游戏给出一种宝物,可捡可不捡.每种宝物有一个价值(有负数).每个宝物有前提宝物列表,必须在前面的关卡取得列表宝物才能捡起这个宝物,求期望收益.k<=100,n&l ...
- TreeMap put 操作分析
public V put(K key, V value) { //t 表示当前节点,记住这个很重要!先把TreeMap 的根节点root 的引用赋值给当前节点 TreeMap.Entry<K,V ...
- 【leetcode 简单】第十五题 加一
给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组. 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字. 你可以假设除了整数 0 之外,这个整数不会以零开头. 示例 1: ...
- 47、Python面向对象中的继承有什么特点?
继承的优点: 1.建造系统中的类,避免重复操作. 2.新类经常是基于已经存在的类,这样就可以提升代码的复用程度. 继承的特点: 1.在继承中基类的构造(__init__()方法)不会被自动调用,它需要 ...
- CounterBreach安装测试的全部过程
CounterBreach安装测试的全部过程 1安装数据库审计的网关 Admin进入 Impcfg初始化 选择网关 是否替换另一个网关? 否 是否改变默认管理口 设置管理口地址 192.168.1.2 ...