#4. Problem 1D. 模拟bitset
Problem 1D. 模拟bitset
Problem 1D. 模拟bitset
时间限制:1s
空间限制:256MB
题目描述
实现一个表示32位二进制位序列的类,初始使用一个无符号整数进行构造,支持七种操作:
count
- 查询二进制表示中值为 的位的数量any
- 查询二进制表示中是否存在值为 1 的位test pos
- 查询二进制表示中位于pos
位置的值set pos
- 将二进制表示中位于pos
位置的值设为 1reset pos
- 将二进制表示中位于pos
位置的值设为 0flip pos
- 将二进制表示中位于pos
位置的值取反to_ulong
- 查询该二进制表示转化为无符号整数的值
现在使用一个无符号整数 构造一个该类的对象,并对此对象进行 个操作,其中的每个操作 , 操作 , 操作 和操作 都要输出相应的结果。
输入格式
第一行包含无符号整数 和整数 ,含义见描述。
接下来 行,每行包含一个操作命令,操作命令为 count
,any
,test pos
,set pos
,reset pos
,flip pos
,to_ulong
中的一种。
输出格式
对于每个 count
,any
, test pos
和to_ulong
操作都要输出一个查询结果,每个结果占一行。
其中,count
操作的查询结果为一个整数,表示二进制表示中值为 的位的数量;any
操作的查询结果为 YES
或 NO
;test pos
操作的查询结果为 或 ;to_ulong
操作的查询结果为一个32位无符号整数。
样例
输入
31 10
count
reset 0
test 0
test 1
set 5
to_ulong
flip 2
any
set 31
to_ulong
输出
5
0
1
62
YES
2147483706
数据范围
对于 的数据:
所有操作保证合法。
提示
可以使用以下C++的代码模板,只需要补充成员函数的内容即可:
#include <bits/stdc++.h>
using namespace std;
class BitSet
{
public:
BitSet(unsigned x)
{
}
int count()
{
return 0;
}
bool any()
{
return false;
}
int test(int pos)
{
return 0;
}
void set(int pos)
{
}
void reset(int pos)
{
}
void flip(int pos)
{
}
unsigned to_ulong()
{
return 0;
}
};
int main()
{
unsigned x;
int m;
cin >> x >> m;
BitSet b(x);
while(m--)
{
string op; cin >> op;
if(op == "count") cout << b.count() << endl;
else if(op == "any") cout << (b.any()?"YES":"NO") << endl;
else if(op == "test")
{
int pos; cin >> pos;
cout << b.test(pos) << endl;
}
else if(op == "set")
{
int pos; cin >> pos;
b.set(pos);
}
else if(op == "reset")
{
int pos; cin >> pos;
b.reset(pos);
}
else if(op == "flip")
{
int pos; cin >> pos;
b.flip(pos);
}
else cout << b.to_ulong() << endl;
}
return 0;
}