Official

A - 財布の中身 / Contents of the Wallet Editorial by admin

swe-2-high

解説

硬貨と紙幣が両方あるかを調べるには、文字列 \(S\) の中に C が 1 回以上、B が 1 回以上現れるかをそれぞれ確認すればよいです。プログラムは s.find('C') と s.find('B') を使い、見つからない場合に find が返す string::npos と異なるかどうかで存在を判定しています。両方が見つかれば Yes、どちらかが無ければ No を出力します。

正しさの理由:S は C と B のみからなるので、「C が存在する」は「硬貨が 1 枚以上ある」と同値、「B が存在する」は「紙幣が 1 枚以上ある」と同値です。したがって両方の存在を確認すれば条件と完全一致します。

find は文字列を先頭から走査するので各 \(O(N)\)。計算量は時間 \(O(N)\)、入力文字列の保持に \(O(N)\) の空間がかかります。