Problem 2642 --Bitset I - Bit Mask

2642: Bitset I - Bit Mask

"
Time Limit $5$ 秒/Second(s) Memory Limit $512$ 兆字节/Megabyte(s)
提交总数 $9$ 正确数量 $16$
裁判形式 标准裁判/Standard Judge 我的状态 尚未尝试
难度 分类标签 STL

Bit Mask

それぞれがONまたはOFFであるn個のフラグで決定される「状態」は、0,1,…,n−1 番目のフラグを1(ON)または0(OFF)で表した、1つのビット列で表すことができます。 ビット列は各桁が0または1である2進数として表されるため、状態は対応する1つの10進数の整数値として管理することができます。

 また、マスクは特定のビットをONにしたビット列で、操作対象のビット列に適用することで、複数のフラグを同時にON/OFFしたり、特定のパタンのフラグの状態を抽出/除外したい場合などに用います。

 64個のフラグからなる状態を管理するビット列に対して、あらかじめ与えられたいくつかのマスクを用いた以下の種類の操作を行ってください。ただし、初期状態でビット列の全てのフラグはOFFになっているものとします。

 test(i): i番目のフラグの状態がONの場合は1、OFFの場合は0を出力する

 set(m): 指定されたマスクが表す部分のフラグをまとめてONにする

 clear(m): 指定されたマスクが表す部分のフラグをまとめてOFFにする 

flip(m): 指定されたマスクが表す部分のフラグをまとめて反転する 

all(m): 指定されたマスクが表す部分の全てのフラグがONになっている場合1、なっていない場合0を出力する 

any(m): 指定されたマスクが表す部分のいずれかのフラグがONになっている場合1、なっていない場合0を出力する

none(m): 指定されたマスクが表す部分の全てのフラグがOFFになっている場合1、なっていない場合0を出力する

count(m): 指定されたマスクが表す部分のONになっているフラグの数を出力する 

val(m): 指定されたマスクが表す部分の整数値を出力する

入力は以下の形式で与えられます。

mask0 

mask1

 : 

maskn−1 

query1

 query2 

queryq

 n はマスクの数を表す。各maski はi番目のマスクのフラグの状態を表し、それぞれ以下の形式で与えられる。

 k b0 b1 ... bk

 kはONになっているビットの数を表し、続くk個の整数bjは、bj番目のビットがONになっていることを示す。

 各クエリqueryiはi番目のクエリを表し、

 0  i 

または 

1 m 

または 

2  m 

または 

3  m 

または

 4  m 

または 

5  m 

または 

6  m

 または 

7  m 

または 

8  m

 の形式で与えられます。最初の数字0, 1,...,8 は操作の種類を示し、それぞれtest(i), set(m), clear(m), flip(m), all(m), any(m), none(m), count(m), val(m) を表します。

各test, all, any, none, count, val操作ごとに、操作結果を1行に出力してください。
3
3 0 1 3
1 3
3 0 1 2
8
1 0
2 1
3 1
4 2
5 2
6 2
7 2
8 2
0
1
0
2
3

1≤ n≤ 10

1≤ k≤ 64 

1≤ q≤ 200,000

0≤ i<  64 

0≤ m

推荐代码 查看2642 所有题解 上传题解视频得图灵币

本题记录 用 户(点击查看用户) 运行号(点击购买题解) 时 间
算法最快[$19 $ms] 郭菡 1062531 2024-01-14 22:11:23
内存最少[$2332 $KB] 扣一复活 1062996 2024-01-15 21:07:23
第一AC thisislike 1053673 2023-12-26 19:03:36
第一挑战 AOJ大管家 437227 2019-06-08 13:06:47

赛题来源/所属竞赛 会津大学《C++ Programming II》 C++程序设计(高级)

竞赛编号 竞赛名称 竞赛时间 访问比赛
1790 2023-2024-1学期《程序设计技能实训》博弈论、二进制和位运算【23计算机】 2023-12-18 00:00:00 请登录