c++ bitset使用】的更多相关文章

源代码里有一段: unsigned char map[32]; /* Clear control map */ for (count = 0; count < 32; count++) map[count] = 0; /* Set bits in delimiter table */ do { map[*ctrl >> 3] |= (1 << (*ctrl & 7)); } while (*ctrl++); 这段代码用于计算哪些字符需要分割.map实际上是一个压缩过的…
题目链接 题意: 一棵以1为根的树,树上每个节点有颜色标记(<=60),有两种操作: 1. 可以把某个节点的子树的节点(包括本身)都改成某种颜色 2. 查询某个节点的子树上(包括本身)有多少个不同的颜色 思路: 和2012年多校第7场的G题是同类题,DFS序处理出每个节点管辖的管辖范围[L[u], R[u]],其中L[u]就是子树根节点u所在的位置,用线段树成端更新颜色变化,注意到颜色(<=60),可以用bitset<60>,0表示没有这个颜色,1表示有,异或就能区间合并,最后co…
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. //开头 #include <bitset> using std::bitset; 问题1.标准库bitset类型(模版) 需要处理二进制位的时候,可以使用c++标准库提供的bitset类型,它也是类模版,类似vectro容器,唯一不同的是,bitset类型需要说明长度,使用常量表达式给出的整型字面值或者已经初始化的cosnt对象. bitset<> bit;//从0到31位算的,bit的32位每位初始化为0…
C++11之后,bitset的构造函数新加了两种形式: bitset<bits>::bitset (const string& str, string::size_type str_idx, string::size_type str_num, string::charT zero) bitset<bits>::bitset (const string& str, string::size_type str_idx, string::size_type str_nu…
自从c++11起,bitset用于unordered container,将会提供默认的hash函数. 在gcc中,相关代码如下: // DR 1182. /// std::hash specialization for bitset. template<size_t _Nb> struct hash<_GLIBCXX_STD_D::bitset<_Nb>> : public std::unary_function<_GLIBCXX_STD_D::bitset&l…
Matrix multiplication Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Problem Description Given two matrices A and B of size n×n, find the product of them. bobo hates big integers. So you are only asked to find t…
GT and set Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Description You are given N sets.The i−th set has Ai numbers. You should divide the sets into L parts. And each part should have at least one numbe…
题目地址 简要题意: 给出n行m列的0.1矩阵,每次操作可以将任意一行或一列反转,即这一行或一列中0变为1,1变为0.问通过任意多次这样的变换,最多可以使矩阵中有多少个1. 思路分析: 行数比较小,先不考虑对列的操作,将行数的所有情况举出来最多2^10种情况.对于已经固定了对行进行怎样的操作后,这种情况下对列的最优操作就是对每一列,如果此时1比0多就不变,不然就反转.实现在代码中就是一个for循环扫一遍.注意本题反转行.列采用bitset中的flip函数是非常合适的,因为每个数也不是1就是0,恰…
题目链接 http://codeforces.com/gym/100917/problem/J Description standard input/outputStatements The jury of Berland regional olympiad in informatics does not trust to contest management systems, so the Berland regional programming contest is judged by th…
这个比较简单,直接上代码: bitset< > *b = >(); bitset< > *c = >(); ofstream out("I:\\test.dat",ios::binary); ); out.close(); ifstream in("I:\\test.dat", ios::binary); ; i < c[].size();) { ; in.read(&temp, sizeof(char)); ; j…
vs(i)表示患i这种疾病的牛的集合. f(S)表示S集合的病被多少头牛患了. 枚举不在S中的疾病i,把除了i和S之外的所有病的牛集合记作St. f(S|i)=max{f(S)+((St|vs(i))^St)中牛的数量} #include<cstdio> #include<bitset> #include<algorithm> using namespace std; bitset<1000>vs[15],t,t2; int n,m,K,ans,f[1<…
<C++ Primer 4th>读书摘要 最重要的标准库类型是 string 和 vector,它们分别定义了大小可变的字符串和集合.这些标准库类型是语言组成部分中更基本的那些数据类型(如数组和指针)的抽象.另一种标准库类型 bitset,提供了一种抽象方法来操作位的集合. 标准库string类型 有一种情况下,必须总是使用完全限定的标准库名字:在头文件中.理由是头文件的内容会被预处理器复制到程序中. #include <string> using std::string; 几种初…
题意:给n个文件,包括文件名和文件大小,然后给出k个关键词,查询包含该关键词的文件的大小总和.文件名为一些中括号括起的关键词的合集. 解法:可用bitset记录每一个关键词在哪些文件中出现,然后查询即可. bitset用法如下: bitset<SIZE> bs; bool is_set = bs.any(); //是否存在1 bool not_set = bs.none(); //是否全0 int cnt_one = bs.count(); bs[index] = ; bs.flip(inde…
[本文链接] http://www.cnblogs.com/hellogiser/p/using-bitset-to-print-duplicate-elements-of-array.html [题目] 一个数组有L个元素,取值范围为0到N,其中N<32000,但是不知道N的确切大小.L个元素中有若干个重复元素,只有4KB的内存,如何输出重复元素? [分析] 由于数组的取值在一个范围range[1,32000)之间,我们很自然想到用Bitset来处理.使用Bitset,那么1个整数可以使用1个…
Problem J. Triatrip Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100342/attachments Description The travel agency “Four Russians” is offering the new service for their clients. Unlike other agencies that only suggest one-way…
std::bitset是STL的一个模板类,它的参数是整形的数值,使用位的方式和数组区别不大,相当于只能存一个位的数组.下面看一个例子 bitset<20> b1(5); cout<<"the set bits in bitset<5> b1(5) is:" << b1 <<endl; 结果是   the set bits in bitset<5> b1(5) is:00000000000000000101 它是以…
Bitset Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 10007    Accepted Submission(s): 7749 Problem DescriptionGive you a number on base ten,you should output it on base two.(0 < n < 1000) Inp…
[bzoj3687][FJ2014集训]简单题 2014年9月14日1,8212 [题目描述]小呆开始研究集合论了,他提出了关于一个数集四个问题:1. 子集的异或和的算术和.2. 子集的异或和的异或和.3. 子集的算术和的算术和.4. 子集的算术和的异或和.目前为止,小呆已经解决了前三个问题,还剩下最后一个问题还没有解决,他决定把这个问题交给你,未来的集训队队员来实现.[输入格式]从 xor.in 中输入数据第一行,一个整数 n.第二行,n 个正整数,表示 a1, a2, …, an[输出格式]…
DP+bitset  HDU5716 dp[i][j] = dp[i-1][j-1] && (s[i] in set[j]); 第二维压bitset #include <bits/stdc++.h> #define X first #define Y second #define mp make_pair #define pii pair<int, int> #define gg puts("gg"); using namespace std;…
如何联合索引查询? 所以给定查询过滤条件 age=18 的过程就是先从term index找到18在term dictionary的大概位置,然后再从term dictionary里精确地找到18这个term,然后得到一个posting list或者一个指向posting list位置的指针.然后再查询 gender=女 的过程也是类似的.最后得出 age=18 AND gender=女 就是把两个 posting list 做一个"与"的合并. 这个理论上的"与"…
有些程序要处理二进制位的有序集,每个位可能包含的是0(关)或1(开)的值.位是用来保存一组项或条件的yes/no信息(有时也称标志)的简洁方法.标准库提供了bitset类使得处理位集合更容易一些.要使用bitset类就必须要包含相关的头文件.在本书提供的例子中,假设都使用了std::bitset的using声明: #i nclude <bitset> using std::bitset; 3.5.1  bitset的定义和初始化 表3-6列出了bitset的构造函数.类似于vector,bit…
题目大意: 每个人有五门课成绩,初始给定一部分学生的成绩,然后每次询问给出一个学生的成绩,希望知道在给定的一堆学生的成绩比这个学生每门都低或者相等的人数 因为强行要求在线查询,所以题目要求,每次当前给定的学生成绩都异或上一次的答案 先将学生按每一门成绩都排一次序 这里将学生分块成sqrt(n)的块数,然后在当前块中用bitset容器来记录含有学生的状态 这里可以记录状态的前缀和,因为比后面成绩好的,必然比前面的学生的成绩也好 查询的时候只要查到正好比他高的学生属于哪一块,这样只要访问sqrt(n…
题目大意: 小呆开始研究集合论了,他提出了关于一个数集四个问题:1. 子集的异或和的算术和.2. 子集的异或和的异或和.3. 子集的算术和的算术和.4. 子集的算术和的异或和.目前为止,小呆已经解决了前三个问题,还剩下最后一个问题还没有解决,他决定把这个问题交给你,未来的集训队队员来实现.[输入格式]从 xor.in 中输入数据第一行,一个整数 n.第二行,n 个正整数,表示 a1, a2, …, an[输出格式]输出到 xor.out 中一行,包含一个整数,表示所有子集和的异或和.[样例输入]…
题目大意: 添加尽可能少的边,最后使图形成二分图 一开始将图区分成一个个联通分量,根据二分图染色,计算出每个联通分量的黑色点和白色点的个数 希望添加的边最少,那么合并的时候,希望黑白块尽可能平均,这无疑背包dp做,但超时了...T T 跟着题解说的bitset,学了一下,果然总共10000个点不到,那么只要用bitset上的某一位代表取到的值即可- -,好神奇..这里用的是或运算 #include <cstdio> #include <cstring> #include <i…
题目链接:http://codeforces.com/contest/707/problem/D 根据询问建立一棵树然后DFS. #include<bits/stdc++.h> using namespace std; const int N=1e3+3; const int maxn=1e5+3; int n,m,q; vector<int> G[maxn]; bitset<N> bit[N]; bitset<N> opp; int ope[maxn],a…
题目链接:http://poj.org/problem?id=2443 题目大意:给你N个集合,每个集合里有若干个数.M个查询,每个查询有a,b两个数.问是否存在一个集合同时包含a,b这两个数.若存在则输出Yes,否则为No. 康神竟然一下子就想出来了.. 思路:统计每个数在哪个集合出现过,用bitset记录下来.然后对于a,b,则把两个bitset取与. 如果得到空集就是No,否则就是Yes. #include <cstdio> #include <bitset> #includ…
template <size_t N> class bitset; BitsetA bitset stores bits (elements with only two possible values: 0 or 1, true or false, ...).[bitset存储位(元素只能为两种可能的数值,即0或1,true或false,...)]The class emulates an array of bool elements, but optimized for space allo…
题意 给定一个正整数集,求所有子集算术和的异或和   题解 每次加入一个元素x,用原集合a xor (a<< x) 然后每一个值统计一下 bitset看起来很优越,是一个能位运算的布尔数组 #include<bitset> #include<stdio.h> int n,sum,ans; using namespace std; bitset<>a; int main(){ scanf("%d",&n); a[]=; ;i<…
昊昊爱运动 II 昊昊喜欢运动 他N天内会参加M种运动(每种运动用一个[1,m]的整数表示) 现在有Q个操作,操作描述如下 昊昊把第l天到第r天的运动全部换成了x(x∈[1,m]) 问昊昊第l天到第r天参加了多少种不同的运动 Input 输入两个数N, M (1≤N≤105, 1≤M≤100); 输入N个数ai(ai∈[1,m])表示在第i天昊昊做了第ai类型的运动; 输入一个数Q(1≤Q≤105); 输入Q行 每行描述以下两种操作 形如M l r x,表示昊昊把第l天到第r天的运动全部换成了x…
题目链接:http://hihocoder.com/problemset/problem/1041 学会了用C++的bitset哈,可喜可贺.以后遇到超过64位想用位来表示状态就不愁了哈. 这题用bitset存从节点1出发开始dfs,某点按照dfs顺序能够到达的所有点的集合.后序更新这个bitset,用或运算把下属的可达节点都更新上来. 先一遍dfs把bitset更新出来,再一遍dfs判断题中所给顺序是否合法.第二遍dfs的时候就按照给定的顺序扫描,根据某一个分支是不是有目标节点来判断退出. /…