当前位置: 首页 > news >正文

bitset

bitset 的基本用法

定义

bitset 的大小在定义时必须指定,通常是一个常量或编译时常量。例如:

const int MAXN = 64; // 定义最大位数
bitset<MAXN> bits;
常用方法
  1. 构造函数

    • bitset<size>(value):用一个整数值初始化 bitset
    • bitset<size>(string):用一个二进制字符串初始化 bitset
  2. 位操作

    • bits[i]:访问第 ( i ) 位的值(0 或 1)。
    • bits.set(i):将第 ( i ) 位设置为1。
    • bits.reset(i):将第 ( i ) 位设置为0。
    • bits.flip(i):翻转第 ( i ) 位的值(0 变 1,1 变 0)。
    • bits.test(i):检查第 ( i ) 位是否为1。
  3. 统计方法

    • bits.count():返回 bitset 中1的个数。
    • bits.size():返回 bitset 的大小(位数)。
    • bits.any():检查 bitset 中是否有任何一位为1。
    • bits.none():检查 bitset 中是否所有位都为0。
    • bits.all():检查 bitset 中是否所有位都为1。
  4. 转换方法

    • bits.to_string():将 bitset 转换为二进制字符串。
    • bits.to_ulong():将 bitset 转换为 unsigned long 类型的整数。
    • bits.to_ullong():将 bitset 转换为 unsigned long long 类型的整数。

在斑马值问题中的应用

在斑马值问题中,我们需要计算一个数的二进制表示中1的个数。bitsetcount 方法可以高效地完成这个任务。

示例代码
#include <iostream>
#include <bitset>
using namespace std;const int MAXN = 64; // 最大二进制位数ll countZebraValue(ll l, ll r, ll k) {ll count = 0;for (ll x = l; x <= r; ++x) {bitset<MAXN> bits(x); // 将 x 转换为 bitsetif (bits.count() == k) { // 计算二进制表示中1的个数count++;}}return count;
}int main() {int t;cin >> t;while (t--) {ll l, r, k;cin >> l >> r >> k;cout << countZebraValue(l, r, k) << endl;}return 0;
}

代码解释

  1. 定义 bitset

    • 使用 bitset<MAXN> 定义一个大小为 MAXNbitsetMAXN 是一个常量,表示最大二进制位数。
  2. 计算1的个数

    • 使用 bitset<MAXN> bits(x) 将整数 ( x ) 转换为 bitset
    • 使用 bits.count() 方法计算 ( x ) 的二进制表示中1的个数。
  3. 统计满足条件的数

    • 遍历区间 ([l, r]) 内的每个数 ( x ),如果 ( x ) 的二进制表示中1的个数等于 ( k ),则计数器 count 加1。

相关文章:

  • risc-V学习日记(4):RV32I指令集
  • spark 课程总结
  • ubuntu安装git及使用(本地git)
  • Docker 安装 kafka (bitnami/kafka:4.0)
  • 2025系统架构师---论软件架构风格
  • android Observable 和Observer 是什么
  • 探索DeepWiki:GitHub源码阅读的变革性工具
  • Python 自动化办公:Excel 数据处理的“秘密武器”
  • Linux Socket编程:从API到实战
  • 【2025最近Java面试八股】Spring中循环依赖的问题?怎么解决的?
  • 深度理解linux系统—— 进程概念
  • 端到端算法在SLAM中的应用:从理论到实践全解析
  • PlatformIO 入门学习笔记(一):背景了解
  • vue3项目中模拟AI的深度思考功能2.0
  • 2025 VSCode中如何进行dotnet开发环境配置完整教程
  • 【Java学习笔记】类与对象
  • 【文心快码】确实有点东西!
  • STM32标准库和HAL库SPI发送数据的区别-即SPI_I2S_SendData()和HAL_SPI_Transmit()互换
  • 计算机网络笔记(十四)——3.1数据链路层的几个共同问题
  • 03.使用spring-ai玩转MCP
  • 香港警务处高级助理处长叶云龙升任警务处副处长(行动)
  • 银川市长信箱被指“已读乱回”,官方通报:对相关责任人问责处理
  • “世纪火种”嘉年华启动,69家单位加入阅读“朋友圈”
  • 岭南非遗大IP来上海了,舞剧《英歌》在文化广场连演两场
  • 长三角与粤港澳大湾区融合发展,无锡何以成为窗口?
  • 2025年超长期特别国债24日首次发行