bitset的创建:

#include<bitset>bitset<32> ar; //默认全为0
bitset<32> ar(n); //n的二进制
bitset<32> ar(str); //01串
bitset<n> ar(str,pos,n); //从str第p位开始的n位

基础用法:

ar.size();//返回位数
ar.count();//返回1的个数
ar.any();//返回是否有1
ar.none();//返回是否没有1
ar.test(p);//返回第p位是不是1
ar.set();//全部设为1
ar.set(p);//第p位设为1
ar.reset();//全部设为0
ar.reset(p);//第p位设为0
ar.flip();//全部反转
ar.flip(p);//第p位反转
ar.to_ulong();//返回unsigned long
ar.to_ullong();//返回unsigned long long
ar.to_string();//返回string

例题:

515. 「LibreOJ β Round #2」贪心只能过样例

(牛客练习赛22也有这个题)

AC代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <bitset>
#define lowbit(x) (x&(-x))
using namespace std;
typedef long long LL;
const int N = 1e6 + 7;
const int INF = 0x3f3f3f3f;
int n, l, r;
int main(int argc, char const *argv[]){while(~scanf("%d", &n)){bitset<1000005> a, b;b[0] = 1;while(n--){scanf("%d%d", &l, &r);for(int i = l; i <= r; ++i){a |= (b<<i*i);}b = a;a.reset();}printf("%d\n", b.count());}return 0;
}

CF 914F Substrings in a String

传送门
单点修改和询问一个子串在母串一定范围内的出现次数。
这题特点是子串的长度很短。然后可以开26个bitset存每个字母出现的位置,每次询问就遍历一遍子串,位移一下bitset,乱搞搞就行了。

卧槽:手写bitset JAVA_bitset

好奇用字符串咋写。卧槽后缀自动机写这么麻烦的吗?
mmmod_lqs
BiIIy_JAVA
DGC
ShinriiTin
dy0607

#include<bits/stdc++.h>
#define fi first
#define se second
#define iis std::ios::sync_with_stdio(false);cin.tie(0)
#define pb push_back
#define o2(x) (x)*(x)
using namespace std;
typedef long long LL;
typedef pair<int, int> pii;
typedef pair<LL, LL> pll;const int INF = 0x3f3f3f3f;
const LL mod = 1000000007;
const int MXN = 1e5 + 7;int n, q;
char ar[MXN], s[MXN];
bitset<MXN> x[27], ans, ret;
int main() {scanf("%s%d", ar+1, &q);n = strlen(ar+1);for(int i = 1; i <= n; ++i) {x[ar[i]-'a'].set(i);ret[i-1] = 1;}int opt, l, r;while(q --) {scanf("%d", &opt);if(opt == 1) {scanf("%d%s", &r, s);x[ar[r]-'a'].reset(r);ar[r] = s[0];x[ar[r]-'a'].set(r);}else {scanf("%d%d%s", &l, &r, s+1);int len = strlen(s+1);if(r-l+1 < len) {printf("0\n");continue;}ans = ret; --l, -- r;for(int i = 1; i <= len; ++i) {ans &= (x[s[i]-'a']>>i);}printf("%d\n", (ans>>l).count()-(ans>>(r-len+2)).count());}}return 0;
}

统计二进制中1的数量:

//方法一:
int bitCount(unsigned int n){unsigned int tmp = n - ((n >> 1) & 033333333333) - ((n >> 2) & 011111111111);return ((tmp + (tmp >> 3)) & 030707070707) % 63;
}//方法二:
bitset<32> a(n);
a.count();//方法三:
__builtin_popcount(n)//返回二进制位中有多少个1
__builtin_popcountll//longlong
__builtin_parity(n)//返回二进制位中1的数量的奇偶性,奇数返回1,偶数返回0
__builtin_ffs(n)//返回二进制末尾最后一个1的位置,从一开始
__builtin_ctz(n)//返回二进制末尾后面0的个数,当n为0时,和n的类型有关#define LeftPos(x) 32 - __builtin_clz(x) - 1
#define LeftPosll(x) 64 - __builtin_clzll(x) - 1

bitset简单用法相关推荐

  1. 反编译工具jad简单用法

    反编译工具jad简单用法 下载地址: [url]http://58.251.57.206/down1?cid=B99584EFA6154A13E5C0B273C3876BD4CC8CE672& ...

  2. QCustomPlot的简单用法总结

    QCustomPlot的简单用法总结 第一部分:QCustomPlot的下载与安装 第二部分:QCustomPlot在VS2013+QT下的使用 QCustomPlot的简单用法总结    写在前面, ...

  3. python matplotlib 简单用法

    python matplotlib 简单用法 具体内容请参考官网 代码 import matplotlib.pyplot as plt import numpy as np # 支持中文 plt.rc ...

  4. Windump网络命令的简单用法

    Windump网络命令的简单用法 大家都知道,unix系统下有个tcpdump的抓包工具,非常好用,是做troubleshooting的好帮手.其实在windows下也有一个类似的工作,叫windum ...

  5. Android TabLayout(选项卡布局)简单用法实例分析

    本文实例讲述了Android TabLayout(选项卡布局)简单用法.分享给大家供大家参考,具体如下: 我们在应用viewpager的时候,经常会使用TabPageIndicator来与其配合.达到 ...

  6. shell expect的简单用法

    为什么需要expect?     我们通过Shell可以实现简单的控制流功能,如:循环.判断等.但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如 telnet服务器等进 ...

  7. Shellz中awk的简单用法

    其实shell脚本的功能常常被低估.在实际应用中awk sed 等用法可以为shell提供更为强大的功能.下面我们将一下awk调用的简单方法进行了总结.方便同学们学习: awk的简单用法: 第一种调用 ...

  8. python装饰器实例-Python装饰器原理与简单用法实例分析

    本文实例讲述了Python装饰器原理与简单用法.分享给大家供大家参考,具体如下: 今天整理装饰器,内嵌的装饰器.让装饰器带参数等多种形式,非常复杂,让人头疼不已.但是突然间发现了装饰器的奥秘,原来如此 ...

  9. python装饰器实例-Python装饰器简单用法实例小结

    本文总结分析了Python装饰器简单用法.分享给大家供大家参考,具体如下: 装饰器在python中扮演着很重要的作用,例如插入日志等,装饰器可以为添加额外的功能同时又不影响业务函数的功能. 比如,运行 ...

最新文章

  1. 《Bigtable:a distributed storage system for struct data》笔记
  2. 3.2 封装成帧和透明传输
  3. 我在神策做研发丨做冲在前方的第一方队,造中国最好的开源 SDK
  4. VTK:二次抽取用法实战
  5. 碎片化趋势下手机浏览器或成赢家
  6. hive源碼編譯(失敗記錄)
  7. python转置_python数据分析类库系列Numpy之 数组转置和轴对换
  8. springboot前端传参date类型后台处理方式
  9. git配置远程仓库,同时配置github、gitee、gitlab,完美解决方案
  10. 贝叶斯网的R实现( Bayesian networks in R)bnlearn(3)
  11. 图论算法:稳定婚姻问题,如何找到最适合自己的另一半
  12. 正确方式安装Acrobat DC(附安装包)
  13. python ndarray append_Python中的numpy.append()
  14. 美国之行---领略真正的美国文化--牛排
  15. 水善利万物而不争,处众人之所恶,故几于道
  16. 基于坐标变换与随机Hough 变换的抛物线运动目标检测算法
  17. JAVA代码怎样变成软件_怎么使JAVA程序变成可执行程序
  18. 新零售微服务解决方案,打通企业微信、饿了么、美团、京东到家
  19. 白天写代码,晚上驯豹子,就是这么有趣~
  20. Linux之汇编语言

热门文章

  1. quartus II使用
  2. MobileNetv2-SSDlite训练自己的数据集(一)——配置安装caffe-ssd
  3. esp32--无线控制灯
  4. linux 如何重命名
  5. 【常见错误 error】Vivado SDK在启动程序时显示cannot stop MicroBlaze.MicroBlaze is held in reset 问题解决办法
  6. c#语言break语句用法,C# break语句
  7. Proteus-中英文对照
  8. 计算机网络技术的就业前景
  9. 系统解剖学 | 神经系统 | 核上瘫和核下瘫
  10. linux-vimdiff,diff,patch,cmp:文件比较