Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。
・問題 "Bit Flag"
https://onlinejudge.u-aizu.ac.jp/problems/ITP2_10_C
64個のフラグからなる状態を管理するビット列に対して、以下の種類の操作を行ってください。
ただし、初期状態でビット列の全てのフラグはOFFになっているものとします。
test(i): i番目のフラグの状態がONの場合1、OFFの場合0を出力する
set(i): i番目のフラグをONにする
clear(i): i番目のフラグをOFFにする
flip(i): i番目のフラグを反転する
all: 全てのフラグがONになっている場合1、なっていない場合0を出力する
any: 何れかのフラグがONになっている場合1、なっていない場合0を出力する
none: 全てのフラグがOFFになっている場合1、なっていない場合0を出力する
count: ONになっているフラグの数を出力する
val: 状態の整数値を出力する
僕が作成、提出したコードは、以下のとおりです。
Aizu Online Judge in C++ #ITP2_10_C : Bit Flag
/* Aizu Online Judge in C++ #ITP2_10_C : Bit Flag https://onlinejudge.u-aizu.ac.jp/problems/ITP2_10_C 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ bitset<64> b; int q; cin>>q; vector<int> query(q); for(int i=0;i<q;i++){ cin>>query[i]; if(query[i]==0){ int j; cin>>j; cout<<b.test(j)<<endl; }else if(query[i]==1){ int j; cin>>j; b.set(j,1); }else if(query[i]==2){ int j; cin>>j; b.set(j,0); }else if(query[i]==3){ int j; cin>>j; b.flip(j); }else if(query[i]==4){ cout<<b.all()<<endl; }else if(query[i]==5){ cout<<b.any()<<endl; }else if(query[i]==6){ cout<<b.none()<<endl; }else if(query[i]==7){ cout<<b.count()<<endl; }else if(query[i]==8){ cout<<b.to_ulong()<<endl; } } return 0; }
設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/