寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

Aizu Online Judge in C++ #ITP2_10_C : Bit Flag

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/