ACM的奇计淫巧_bitset优化

什么是bitset

bitset 是STL库中的二进制容器,根据C++ reference 的说法,bitset可以看作bool数组,但优化了空间复杂度和时间复杂度,并且可以像整形一样按位与或。

使用方法

申明

bitset的申明要指明长度

bitset<length> bi

这样就申明了一个长度为length的名叫bi的bitset

赋值

bitset重载了[]运算符,故可以像bool数组那样赋值

bi[2] = 1;

这样就能将第二位赋值为1

常用函数

b1 = b2 & b3;//按位与
b1 = b2 | b3;//按位或
b1 = b2 ^ b3;//按位异或
b1 = ~b2;//按位补b1 = b2 << 3;//移位
int one = b1.count();//统计1的个数

优化作用

常常碰到处理的数组只有0和1的变化,此时就可以使用bitset优化。比如求两个集合的交集可以使用按位与运算,求并集可以使用按位或运算

时间: 2024-08-24 19:02:41

ACM的奇计淫巧_bitset优化的相关文章

ACM的奇计淫巧系列

突然想写个系列,算是总结总结集训中遇到的各种黑科技吧,这是目录 ACM的奇计淫巧_输入挂 ACM的奇计淫巧_扩栈C++/G++ ACM的奇计淫巧_bitset优化

ACM的奇计淫巧_扩栈C++/G++

C++ #pragma comment(linker, "/STACK:102400000,102400000") G++ int size = 256 << 20; // 256MB char *p = (char*)malloc(size) + size; __asm__("movl %0, %%esp\n" :: "r"(p));

ACM的奇计淫巧_输入挂

什么是输入挂? 众所周知scanf比cin快的多,那么有没有比scanf更快的东西呢?答案就是输入挂,输入挂利用了告诉读取的函数getchar(),然后再人工处理成整数或浮点,比使用scanf快太多. 什么时候用输入挂? 当输入规模达到1×10^6次方的时候,就需要输入挂,否则很有可能超时. 代码 代码不是我写的,此处给出出处:http://www.cnblogs.com/xiaohongmao/archive/2012/05/29/2523760.html 整数 inline bool sca

[ACM] POJ 2154 Color (Polya计数优化,欧拉函数)

Color Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7630   Accepted: 2507 Description Beads of N colors are connected together into a circular necklace of N beads (N<=1000000000). Your job is to calculate how many different kinds of th

JavaScritpt 的 奇淫巧术

比如话 判断一个值是否为空 ,为空就赋值上默认值, 不为空就保留. if( i ){ i  =  123; }    //可以用一句话代替 i = i ||  123; 好酷的用法 或者

Mac触摸板的那些奇淫巧术

关于Mac触摸板的用法我刚开始觉得是有些不太上手,比如上滑.右击.复制.缩放.旋转. 在这里呢,刚开始用Mac的我总结了一下几个Mac触摸板的用法,希望对大家有帮助. 上滑.下滑浏览页面:两根手指轻触Mac触摸板,上滑:两手指向上轻轻滑动(这个方法跟一般的电脑触摸板方法是一样的).同理大家可以知道,下滑当然就是两根手机轻轻向下滑动了.(这里我给大家附图) 右击:在Mac中,右击就有好几种方法了.(1)用两手指轻轻触碰触摸板(2)control+轻触触摸板. 复制:用三个手指一起向左向右轻轻滑动,

【深入浅出jQuery】源码浅析2--奇技淫巧

最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐进增强)优雅的处理能力以及 Ajax 等方面周到而强大的定制功能无不令人惊叹. 另外,阅读源码让我接触到了大量底层的知识.对原生JS .框架设计.代码优化有了全新的认识,接下来将会写一系列关于 jQuery 解析的文章. 我在 github 上关于 jQuery 源码的全文注解,感兴趣的可以围观一下

js-ifelse-奇技淫巧

我们有A,B,C,D四个不同的类别,在最开始的时候只有三个类别,并且两个类别是做同样的事: 1 function categoryHandle(category) { 2 if(category !== 'A') { 3 console.log('B, C'); 4 } else { 5 console.log('A'); 6 } 7 } 1.1 接着,出现了类别D——它与B和C相比来说,有一个不同的任务,而它又和B和C有一个相同的任务.于是,代码变成了这样. function category

关于 Chrome Console 查看DOM详情细节的奇思淫巧

我们期待打印出的dom效果如下: 但某些时候,打印出来,或者通过$0.$1.document.getElementById('####') 等方式打印出来的效果如下: 根据第一幅图我们不难看出,当打印出的是一个数组时,就chrome console就可以解析出我们理想的数据结构,所以,如果出现第二种时,我们可以套上一层数组 [ ] 再打印即可 如, [document.getElementById('app')] ,  如图所示: 原文地址:https://www.cnblogs.com/CyL