C - Prefix and Suffix 解説
by
AngrySadEight
ビット演算により出力の場合分けを減らす方法
この問題では,「\(S\) が \(T\) の接頭辞か」「\(S\) が \(T\) の接尾辞か」のそれぞれの組合せに対して異なる出力結果を返す必要があり,地道に場合分けすると少しだけ面倒です.
出力する値をよく観察しましょう.すると,次のことがわかります.
- 出力する値は,「\(S\) が \(T\) の接頭辞か」を上位ビット,「\(S\) が \(T\) の接尾辞か」を下位ビットとする,\(2\) ビットの値として表されている.
- 上位ビットが立っていることは,\(S\) が \(T\) の接頭辞ではないことを表している.
- 下位ビットが立っていることは,\(S\) が \(T\) の接尾辞ではないことを表している.
ビットが立っていることが,接頭辞/接尾辞ではないことに対応することに注意してください.
これにより,\(b_1=\)(\(S\) が \(T\) の接頭辞であるとき \(0\),ないとき \(1\)),\(b_2=\)(\(S\) が \(T\) の接尾辞であるとき \(0\),ないとき \(1\))とおくと,答えは \(2b_1 + b_2\) と,一つの式だけで表すことができます.
投稿日時:
最終更新: