我是蒟蒻一名,请大佬勿喷。

绝大部分来自https://www.cnblogs.com/magisk/p/8809922.html   ,  可以去大佬博客逛一逛

bitset是C++中类似数组的一种结构,但是因为每位只能是0或1,对于某些明显的二进制题目来说,如果你不会压位的话,bitsei确实为一个很好的选择。

bitset有4个构造函数。

 #include <iostream>
#include<bitset>
using namespace std;
int main()
{
bitset<> a("");//此处不能出现除了0 1之外的字符,否则将会抛出异常
bitset<> b();//二进制
bitset<> c;//无参构造函数,初始化为0
bitset<> d(a);//拷贝构造函数
cout<<a<<endl;
cout<<b<<endl;
cout<<c<<endl;
cout<<d<<endl;
//使用bitset解题时,注意他如果要输出最后二进制答案,一定要反过来
return ;
}

若bitset位数大于操作数,前面用零补充

bitset中有的操作符

 #include <iostream>
#include<bitset>
using namespace std;
int main()
{
bitset<> a("");//此处不能出现除了0 1之外的字符,否则将会抛出异常
bitset<> b();//二进制
bitset<> c;//无参构造函数,初始化为0
bitset<> d(a);//拷贝构造函数 cout<<(a&b)<<endl;//按位与,整型数也是二进制存在计算机里面的,bitset当然也可以
//意思就是整型有的位运算,bitset全都有
//不过要记住的是要打括号
cout<<(a|b)<<endl;
cout<<(a^b)<<endl;
cout<<(a>>)<<endl;
cout<<(a<<)<<endl;
//前面说bitset类似于数组,那么肯定可以通过下标访问元素的
a[]=;
cout<<a<<endl;//结果为0000000011
//还是那个注意点,反的
//结合int的值就很好理解了
return ;
}

如果题目要求输出不带前导零的二进制答案,那么

#include <iostream>
#include<bitset>
using namespace std;
int main()
{
bitset<10> a("10");//此处不能出现除了0 1之外的字符,否则将会抛出异常
int w=-1;
for(int i=a.size();i>=0;i--)
{
if(a[i])
{
w=i;
break;
}
}
for(int i=w;i>=0;i--)
{
cout<<a[i];
}
return 0;
}

  虽然下面会讲bitset的函数可以完成同样的功能,但是蒟蒻的我觉得应该效率和循环应该差不太多

bitset中的函数

 #include <iostream>
#include<bitset>
using namespace std;
int main()
{
bitset<> a("");
cout<<a.count()<<endl;//返回bitset中1的个数
cout<<a.test()<<endl;//相当于数组式的访问,但是会有下标检查
cout<<a.size()<<endl;//返回大小,是最开始定义的大小
cout<<a.any()<<endl;//返回bitset中是否有1
cout<<a.none()<<endl;//返回bitset中是否没有1
cout<<a.all()<<endl;//返回是否全为1 bitset<> b("");
cout<<b.flip()<<endl;//取反,若给参数,则将参数位取反
cout<<b.set()<<endl;//置1
cout<<b.reset()<<endl;//清0
//以上全都可带参数,大概同flip
cout<<b.set(,)<<endl;//相当于b[2]=1; bitset<> c("");
string t1=c.to_string();
unsigned t2=c.to_ulong();
unsigned long long t3=c.to_ullong();
cout<<t1<<endl;//
cout<<t2<<endl;//
cout<<t3<<endl;//
return ;
}

差点忘了贴实例

链接:https://ac.nowcoder.com/acm/contest/1114/C
来源:牛客网
有n个长度为m的文本串,每个串只含有'0'和'1'。接下来有Q次询问,每次给出一个长度为m的字符串,且只含有'0','1'和'_'。如10_1_1。下划线可以匹配'0'或'1'。即10_1_1可以匹配101111,101101,100111,100101四种串。每次询问求出n个文本串中有多少个可以与当前询问的串匹配。

1<=n,m<=1000,1<=q<=100

 #include <iostream>
#define ll long long
#include<bitset>
using namespace std;
bitset<> bit[];
int main()
{
int n,m;
cin>>n>>m;
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
char t;
cin>>t;
bit[i][j]=( t=='' );
}
}
int q;
cin>>q;
while(q--)
{
int ans=;
bitset<> t1,t2,t3,t4;
for(int i=;i<m;i++)
{
char tmp;
cin>>tmp;
t1[i]=tmp==''?:;
t2[i]=tmp==''?:;
}
for(int i=;i<n;i++)
{
t3=t1&bit[i];
t4=t2&bit[i];
if((t3==t1)&&t4.count()==)
ans++;
}
cout<<ans<<endl;
}
return ;
}

代码有点丑,希望别介意(介意我也没办法)

观察题目之后发现m*n=1e6

所以如果可以直接判断文本串是否与询问匹配就可以了

t1存储询问串中所有的1

t2存储询问串中所有的0

因为1&0=0

所以将询问串中等于0的位置在t2中置1,如果t2&文本串==0则0对应起来的,否则不对应

bitset归结,一个实例的更多相关文章

  1. C#[Win32&WinCE&WM]应用程序只能运行一个实例:MutexHelper

    前言 在开发应用程序时,通常只让程序运行一个实例.所以,就要判断程序是否已经运行. 下面是我自己在项目中使用到,封装好的帮助类.有 普通的 C# 应用程序 和 Windows CE 和 Windows ...

  2. 转 C# 只允许运行一个实例

    来源:http://blog.csdn.net/jin20000/article/details/3136791 互斥进程(程序), 简单点说,就是在系统中只能有该程序的一个实例运行. 现在很多软件都 ...

  3. C# 只启动一个实例完全解决方案

    工作上经常会遇到"程序只能启动一个实例"这样的需求. 我想,这样的需求应该很普遍,所以没打算去动脑筋,去找谷歌问下就得了,用下来发现,不是这里不爽就是那里不行. 先说下我详细的几点 ...

  4. ArcGIS API for JavaScript开发环境搭建及第一个实例demo

    原文:ArcGIS API for JavaScript开发环境搭建及第一个实例demo ESRI公司截止到目前已经发布了最新的ArcGIS Server for JavaScript API v3. ...

  5. Sqlserver Sql Agent Job 只能同时有一个实例运行

    Sqlserver Sql Agent中的Job默认情况下只能有一个实例在运行,也就是说假如你的Sql Agent里面有一个正在运行的Job叫"Test Job",如果你现在再去启 ...

  6. c# 只允许一个实例运行

    1.单件模式,Singleton,应用程序只能允许一个实例在运行.这是最好的解决方法2.查询系统进程里是不是已经运行.private void Form1_Load(object sender, Ev ...

  7. Python使用MySQL数据库的方法以及一个实例

    使用环境:Windows+python3.4+MySQL5.5+Navicat 一.创建连接 1.准备工作,想要使用Python操作MySQL,首先需要安装MySQL-Python的包,在Python ...

  8. Linux编程之《只运行一个实例》

    概述 有些时候,我们要求一个程序在系统中只能启动一个实例.比如,Windows自带的播放软件Windows Medea Player在Windows里就只能启动一个实例.原因很简单,如果同时启动几个实 ...

  9. Qt之运行一个实例进程

    简述 发布程序的时候,我们往往会遇到这种情况: 只需要用户运行一个实例进程 用户可以同时运行多个实例进程 一个实例进程的软件有很多,例如:360.酷狗- 多个实例进程的软件也很多,例如:Visual ...

  10. winform托盘时,要运行一个实例,解决办法

    需求:winform应用程序,当隐藏到托盘时,再次运行exe程序,让其只运行一个实例,并且把窗口从托盘中显示出来 应用程序名可以通过下面代码,获取到: Process current = Proces ...

随机推荐

  1. SQL SERVER添加表注释、字段注释

    --为字段添加注释 --Eg. execute sp_addextendedproperty 'MS_Description','字段备注信息','user','dbo','table','字段所属的 ...

  2. CSS 实现水平垂直居中

    使用绝对定位 在已经知道子元素的宽高的时候,子元素设置成绝对定位,top,left,right,bottom=0, margin = auto .wrap{ position: relative; w ...

  3. Nmap参考指南中文版

    Nmap参考指南中文版 来源: http://www.nmap.com.cn/doc/manual.shtm 译注 该Nmap参考指南中文版由Fei Yang <fyang1024@gmail. ...

  4. Windows程序设计--(二)Unicode 简介

    2.2 宽字符和C语言 2.2.2 更宽的字符 在C语言中的宽字符正是基于short型数据的, 这一数据类型在头文件WCHAR.H中的定义为: typedef unsigned short wchar ...

  5. 【JAVA】 03-Java中的异常和包的使用

    链接: 笔记目录:毕向东Java基础视频教程-笔记 GitHub库:JavaBXD33 目录: <> <> 内容待整理: 异常 异常和错误的发生和区别 异常:java运行期间发 ...

  6. Java JNA (一)—— 调用dll

    Java调用C++动态链接库的方式很多,有jnative,jna等.这里介绍如何通过jna的方式调用动态链接库. 调用代码很简单,就是需要注意几个问题. 补充:如dll内部访问配置文件,需将配置文件放 ...

  7. tensorflow教程:tf.contrib.rnn.DropoutWrapper

    tf.contrib.rnn.DropoutWrapper Defined in tensorflow/python/ops/rnn_cell_impl.py. def __init__(self, ...

  8. 毕设问题(1)表格table的表头自定义、复合表头,组合表格

    毕业设计,是一个web项目,遇到的些问题,记录下来.也许也有同样只知道一些,不是那么系统的学过的人,会遇到同样的问题,希望有所帮助. 百度知道有这样一个问题: bootstrap table 如何实现 ...

  9. python常用函数 R

    replace(str, str) 字符串替换. 例子: rjust(int) 格式化字符串,右对齐,支持传入填充值. 例子: rstrip(str) 删去右边的参数,支持传入参数. 例子: roun ...

  10. Vue:对象更改检测注意事项

    还是由于 JavaScript 的限制,Vue 不能检测对象属性的添加或删除: var vm = new Vue({ data: { a: 1 } }) // `vm.a` 现在是响应式的 vm.b ...