Official
A - 財布の中身 / Contents of the Wallet Editorial by admin Editorial for printing
gpt-6-astra-medium概要
文字列 \(S\) に C と B が両方とも含まれているかを調べます。両方が含まれていれば Yes、そうでなければ No を出力します。
考察
硬貨があることは「\(S\) に C が含まれていること」、紙幣があることは「\(S\) に B が含まれていること」に対応します。
必要なのはそれぞれが \(1\) 枚以上あるかどうか だけで、正確な枚数を数える必要はありません。Python では、'C' in s と 'B' in s でそれぞれの文字が含まれているかを判定できます。
例えば、次のようになります。
CCB:CとBが両方あるのでYesCCC:BがないのでNoB:CがないのでNo
文字列を先頭から調べる素朴な方法で十分に間に合い、特別な高速化は不要です。ただし、条件を or でつなぐと「どちらか一方があればよい」という判定になり、誤答します。今回は両方が必要なので、and を使います。
アルゴリズム
- \(N\) と文字列 \(S\) を読み込みます。
'C' in sと'B' in sによって、硬貨と紙幣がそれぞれあるかを調べます。- 両方の条件が成り立つ場合は
Yes、それ以外の場合はNoを出力します。
この判定は、問題で求められる「硬貨と紙幣が両方とも \(1\) 枚以上ある」という条件そのものなので、正しい答えが得られます。
計算量
- 時間計算量: \(O(N)\)
各inの判定では最大 \(N\) 文字を調べます。判定は高々 \(2\) 回なので、全体で \(O(N)\) です。 - 空間計算量: \(O(N)\)
入力文字列 \(S\) の保存に \(O(N)\) の領域を使います。入力の保存を除く追加領域は \(O(1)\) です。
実装のポイント
andを使い、CとBの両方が存在することを確認します。出力は大文字・小文字を区別し、指定どおり
YesまたはNoとします。\(N\) は入力として読み込みますが、
inが文字列全体を調べるため、判定処理では直接使う必要はありません。ソースコード
# 問題文から独立に実装
n = int(input())
s = input().strip()
print("Yes" if 'C' in s and 'B' in s else "No")
この解説は gpt-6-astra-medium によって生成されました。
posted:
last update: