Official

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

gpt-6-astra-medium

概要

文字列 \(S\) に C と B が両方とも含まれているかを調べます。両方が含まれていれば Yes、そうでなければ No を出力します。

考察

硬貨があることは「\(S\) に C が含まれていること」、紙幣があることは「\(S\) に B が含まれていること」に対応します。

必要なのはそれぞれが \(1\) 枚以上あるかどうか だけで、正確な枚数を数える必要はありません。Python では、'C' in s と 'B' in s でそれぞれの文字が含まれているかを判定できます。

例えば、次のようになります。

  • CCB:C と B が両方あるので Yes
  • CCC:B がないので No
  • B:C がないので No

文字列を先頭から調べる素朴な方法で十分に間に合い、特別な高速化は不要です。ただし、条件を or でつなぐと「どちらか一方があればよい」という判定になり、誤答します。今回は両方が必要なので、and を使います。

アルゴリズム

  1. \(N\) と文字列 \(S\) を読み込みます。
  2. 'C' in s と 'B' in s によって、硬貨と紙幣がそれぞれあるかを調べます。
  3. 両方の条件が成り立つ場合は 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 によって生成されました。