競技プログラミング用 知識集積所
bool型
最終更新:
sport_programming
-
view
雑な説明
最も代表的な整数型変数。
レベル
ABCのA問題レベル。
詳細な説明
1ビットでtrueとfalseのみ入れられる。
if分岐などの条件に長々と書きたくないときに、bool型変数に一度書き込んだりする。
あるいは、大量の条件を処理する場合に事前にbool型変数を用意して処理することもある。
if分岐などの条件に長々と書きたくないときに、bool型変数に一度書き込んだりする。
あるいは、大量の条件を処理する場合に事前にbool型変数を用意して処理することもある。
宣言と初期化
宣言だけする場合
bool a;
初期化もする場合
bool a = true;
可能な演算
代入 =
a=b; で、変数aの中身をbに書き換える。
数学とは違い、左右を逆にして b=a; と書くと意味が変わるので注意。
数学とは違い、左右を逆にして b=a; と書くと意味が変わるので注意。
かつ &&
a&&b で、aとbが両方trueならtrue、片方でもfalseならfalse、という演算になる。
bool型変数でなくてもbool型を返す判定に対しても使える。
例えば、
bool型変数でなくてもbool型を返す判定に対しても使える。
例えば、
1<=x&&x<=10
と書けば、「xは1以上かつ10以下」という条件を表せることになる。
または ||
a||b で、aとbが片方でもtrueならtrue、両方falseならfalse、という演算になる。
bool型変数でなくてもbool型を返す判定に対しても使える。
例えば、
bool型変数でなくてもbool型を返す判定に対しても使える。
例えば、
x==0||y==0
と書けば、「xとyのどちらか一方でも0」という条件を表せることになる。
反転 !
!a で、aがtrueならfalse、aがfalseならtrue、という演算になる。
ビット演算※系
一応ビット演算※は(シフト以外)可能だが、あまり使うことはないかも……。
よく使う処理
if分岐のときに大量の条件をループで扱う処理
全部trueなら実行したい/1つでもfalseなら実行したい
全部trueなら実行するコード。
bool flag = true; for (int i=0; i<n; i++) { if (!i個めの判定) flag = false; // 条件は否定形なので注意 } if (flag) 実行したい処理
最後の行を
if (!flag) 実行したい処理
に変更すれば、1つでもfalseで実行。
1つでもtrueなら実行したい/全部falseなら実行したい
1つでもtrueなら実行。
bool flag = false; for (int i=0; i<n; i++) { if (i個めの判定) flag = true; } if (flag) 実行したい処理
最後の行を
if (!flag) 実行したい処理
に変更すれば、全部falseで実行。
注意点
「かつ」と「または」の優先順位
a||b&&c と書いた場合、&&の方が優先順位が高いので、a||(b&&c) と解釈される。
……が、ややこしいので、括弧をつけて書くように心がけたい。
……が、ややこしいので、括弧をつけて書くように心がけたい。