在实际noi比赛中,常用 biset 构造出一个二进制串,然后对这个串进行一些位运算。
一种常见的情形是,给你一个只包含 0 和 1 的字符串,然后进行一些位运算。
这时用bitset的套路是:
1、把这个01字符串读入到一个char数组里。
2、然后逐个赋给bitset类型的变量。
3、这样就能愉快的用bitset进行进行位运算了。
例如:
#include <iostream>
#include <string>
#include <bitset>
using namespace std;
const int N=10;
char a[N][N];
bitset<N> b[N];
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%s",a[i]);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
b[i][j]=a[i][j]-'0';
}
}
for(int i=0;i<n;i++){
cout<<b[1][i];//若是110
}
cout<<endl;
for(int i=0;i<n;i++){
cout<<b[2][i];//若是001
}
cout<<endl;
b[1] |= b[2];//或运算,b[2]中是1的位,b[1]中对应的位也全部置为1了。
for(int i=0;i<n;i++){
cout<<b[1][i];//变为111
}
cout<<endl;
return 0;
}