bitset

bitset骚操作

て烟熏妆下的殇ゞ 提交于 2020-04-05 23:17:50
bitset的用途挺多的,是一个比较骚的常数优化 一.很多位数的二进制数 poj 2443 http://poj.org/problem?id=2443 直接开个1万位的二进制数,求交就行了。 有关集合求并交的时候可以考虑biset优化 #include<bitset> #include<cstdio> #define REP(i, a, b) for(register int i = (a); i < (b); i++) #define _for(i, a, b) for(register int i = (a); i <= (b); i++) using namespace std; const int MAXN = 1e3 + 10; const int MAXM = 1e4 + 10; bitset<MAXN> s[MAXM]; int main() { int n; scanf("%d", &n); _for(i, 1, n) { int m, x; scanf("%d", &m); _for(j, 1, m) { scanf("%d", &x); s[x][i] = 1; } } int q; scanf("%d", &q); while(q--) { int a, b; scanf("%d%d", &a, &b); if((s[a] & s[b]).any())

C++之bitset

若如初见. 提交于 2020-03-21 08:34:56
1 #include <iostream> 2 #include <bitset> 3 #include <string> 4 5 using namespace std; 6 //bitset类型处理二进制 7 int main() 8 { 9 //bitset类型的变量a <>内的参数表示的是长度 10 bitset<32> a; 11 cout<<a<<endl; 12 bitset<16> b=0xffff; //一个16进制等于4个二进制 13 cout<<b<<endl; 14 string s("10011001010"); 15 bitset<32> c(s,5,4);//从第五位开始初始化四个,从右向左数剩余补0 16 cout<<c<<endl; 17 18 //操作 19 bool is_set=b.any(); //如果存在1就返回true 20 bool is_notset=a.none();//如果全都是0返回true 21 size_t bits_set=b.count();//返回b里面1的个数 22 size_t bits_set1=b.size()-b.count(); //减法实现b里面0的个数 23 cout<<bits_set1<<endl; 24 a.set(); //将a中的0全部变为1 25 cout<<a<<endl; 26 a

LeetCode题解之Reverse Bits

徘徊边缘 提交于 2020-03-15 11:33:26
1、题目描述 2、题目分析 使用bitset 类的方法 3、代码 1 uint32_t reverseBits(uint32_t n) { 2 bitset<32> b(n); 3 4 string b_s = b.to_string() ; 5 6 for( string::iterator it_b = b_s.begin() , it_e = b_s.end() - 1; it_b < it_e ; ++it_b ,--it_e ){ 7 swap(*it_b ,*it_e); 8 } 9 10 bitset<32> br( b_s ) ; 11 12 uint32_t nr = (uint32_t) br.to_ulong() ; 13 return nr; 14 15 16 17 } 来源: https://www.cnblogs.com/wangxiaoyong/p/9295806.html

STL之bitset

爱⌒轻易说出口 提交于 2020-03-10 20:27:02
C++ bitset使用指南 介绍 :C++语言的一个类库,用来方便地管理一系列的bit位而不用程序员自己来写代码。 bitset除了可以访问指定下标的bit位以外,还可以把它们作为一个整数来进行某些统计。方便储存bool结果 做数字压缩。(来自百度百科) 声明: bitset< size> varm(M) 其中varm为变量名。 size表示该类型在内存中占的位数,是二进制。 M表示变量varm的初始值。 1 、bitset < 4 > bitset1 ;    //无参构造,长度为4,默认每一位为0 //0000 2 、bitset < 8 > bitset2 ( 12 ) ;    //长度为8,二进制保存,前面用0补充 //00001100 3 、string s = "100101" ; bitset < 10 > bitset3 ( s ) ;    //长度为10,前面用0补充 //0000100101 4 、 char s2 [ ] = "10101" ; bitset < 13 > bitset4 ( s2 ) ;    //长度为13,前面用0补充 //0000000010101 5 、bitset < 10 > bitset5 ( "11111" ) ; // C++ 11 语法 //0000011111 注意: 声明时若参数长度比size大

bitset

回眸只為那壹抹淺笑 提交于 2020-03-09 22:48:24
C++的 bitset 在 bitset 头文件中,它是一种类似数组的结构,它的每一个元素只能是0或1,每个元素仅用1bit空间。 bitset常用构造函数有四种,如下 bitset<4> bitset1;  //无参构造,长度为4,默认每一位为0 bitset<8> bitset2(12);  //长度为8,二进制保存,前面用0补充 string s = "100101"; bitset<10> bitset3(s);  //长度为10,前面用0补充 char s2[] = "10101"; bitset<13> bitset4(s2);  //长度为13,前面用0补充 cout << bitset1 << endl;  //0000 cout << bitset2 << endl;  //00001100 cout << bitset3 << endl;  //0000100101 cout << bitset4 << endl;  //0000000010101 注意: 用字符串构造时,字符串只能包含 '0' 或 '1' ,否则会抛出异常。 构造时,需在<>中表明bitset 的大小(即size)。 在进行有参构造时,若参数的二进制表示比bitset的size小,则在前面用0补充(如上面的栗子);若比bitsize大,参数为 整数 时取后面部分,参数为 字符串 时取前面部分

C++ 的位运算:__builtin, bitset

风流意气都作罢 提交于 2020-03-08 10:07:54
int __builtin_ffs (unsigned int x) 返回二进制表示中 x 的最后一位 \(1\) (最右边的)是从后向前第几位,比如 \(7368(1110011001000)\) 返回 \(4\) 。 int __builtin_clz (unsigned int x) 返回二进制表示中前导 \(0\) 的个数。 int __builtin_ctz (unsigned int x) 返回二进制表示中末尾 \(0\) 的个数。 int __builtin_popcount (unsigned int x) 返回二进制表示中 \(1\) 的个数。 int __builtin_parity (unsigned int x) 返回 x 的奇偶校验位,也就是 x 的 \(1\) 的个数模 \(2\) 的结果。 这些函数都有相应的 unsigned long 和 unsigned long long 版本,只需在函数名后面加上 l 或 ll 即可,如 int __builtin_clzll bitset 定义在 <bitset> 库中。 bitset<8> b1; // [0,0,0,0,0,0,0,0] bitset<8> b2(42); // [0,0,1,0,1,0,1,0] bitset<17> bs(0xfff0); // [1,1,1,1,1,1,1,1,1,1

convert bitset descriptor -> cv::Mat

百般思念 提交于 2020-03-06 05:12:45
参考https://blog.csdn.net/magicyang87/article/details/7246771 1.bitset转opencv cv::Mat 注意 (1)Mat 的列为32列,类型为uchar (2)BRIEF::bitset 的长度为256 (3)每8个构成一个uchar 这个测试ok vector < BRIEF :: bitset > temp_brief_descriptors ; extractor ( image , keypoints , temp_brief_descriptors ) ; brief_descriptors_mat = Mat :: zeros ( brief_descriptors . size ( ) , 32 , CV_8UC1 ) ; int row = 0 ; for ( iter = temp_brief_descriptors . begin ( ) ; iter != temp_brief_descriptors . end ( ) ; iter ++ ) { BRIEF :: bitset bits = * iter ; for ( int i = 0 ; i < 32 ; i + = 8 ) { char ch ; for ( int j = 0 ; j < 8 ; ++ j ) { if ( bits

bitset用法

旧街凉风 提交于 2020-02-10 20:32:05
头文件:#include <bitset> bitset类型在定义时就需要指定所占的空间,例如 bitset<233>bit; bitset类型可以用string和整数初始化(整数转化成对应的二进制) int main() { bitset<23>bit (string("11101001")); cout<<bit<<endl; bit=233; cout<<bit<<endl; return 0; } /* 00000000000000011101001 00000000000000011101001 */ bitset支持所有的位运算 bitset<8> foo ("10011011"); cout << foo.count() << endl;  //5  (count函数用来求bitset中1的位数,foo中共有5个1 cout << foo.size() << endl;   //8  (size函数用来求bitset的大小,一共有8位 cout << foo.test(0) << endl;  //true  (test函数用来查下标处的元素是0还是1,并返回false或true,此处foo[0]为1,返回true cout << foo.test(2) << endl;  //false  (同理,foo[2]为0,返回false cout << foo.any()

[专题六] 位运算

旧时模样 提交于 2020-02-01 12:51:32
位运算 位运算的基本操作 typedef struct Bitset { int setsize; // 16 32 ... int 是32位的 int arraysize; // 相当于有几行 unsigned short *v; // 之后会分配一片连续的空间 }Bitset; //还非要大写才行 .. // SetInit(size) 集合大小 Bitset SetInit(int size) { Bitset s; s.setsize = size; s.arraysize = (size + 15) >> 4; // 右移4位 除以16 //我之前好像智障了 sizeof后面的是不需要看的 肯定是要带上的 所以这行就是相当于 创建一个sizes长度的v 类型是unsigned short型 s.v = (unsigned short*) malloc( size * sizeof(unsigned short)); for (int i = 0; i < size; i++) { s.v[i] = 0; // 初始化 } return s; } // SetAssign(A, B) 将集合B 复制 到集合A void SetAssign(Bitset A, Bitset B) { if(A.setsize!=B.setsize) exit(-1); for(int i =

Best way to store an array of BitSet in database?

萝らか妹 提交于 2020-01-14 12:36:31
问题 I got an array of java.util.BitSet that i want to persist in my database, but i don't know whats the best way to do it. To be precise i got x*y true or false value for every entry that i want to store. I tought java.util.BitSet is a good call to try, but i dont really know how could i store it in database. I'm using MySQL database with hibernate(with annotation). This is how i initialize my map: Bitset[] map = new BitSet[x]; for (int i = 0; i < x; i++) { map[i] = new BitSet(y); } Update: