C - T-shirts 解説 by kyopro_friends


事前にTシャツを購入しておくのではなく、当日着るものがなくなっていたときにTシャツを購入するとしてよいです。

また、無地のTシャツは食事の予定にしか使えないため、食事の予定には無地のTシャツを優先して着用するとしてよいです。

これらを踏まえて、洗濯済み/着用済みの無地の/ロゴ入りのTシャツの枚数を管理しながら愚直にシミュレーションすることで \(O(N)\) で問題を解くことができます。

実装例(Python)

_,M=map(int,input().split())
S=input()

muji_ok=M  # 無地/洗濯済み
muji_ng=0  # 無地/着用済み
logo_ok=0  # ロゴ/洗濯済み
logo_ng=0  # ロゴ/着用済み
for c in S:
  if c=='0':
    # 洗濯をし、全てのngがokになる
    muji_ok+=muji_ng
    muji_ng=0
    logo_ok+=logo_ng
    logo_ng=0
  elif c=='1':
    if muji_ok:
      # 無地のTシャツがあるなら着る
      muji_ok-=1
      muji_ng+=1
    elif logo_ok:
      # ロゴ入りのTシャツがあるなら着る
      logo_ok-=1
      logo_ng+=1
    else:
      # 着るものがないならロゴ入りのTシャツを買って着る
      logo_ng+=1
  elif c=='2':
    if logo_ok:
      # ロゴ入りのTシャツがあるなら着る
      logo_ok-=1
      logo_ng+=1
    else:
      # 着るものがないならロゴ入りのTシャツを買って着る
      logo_ng+=1

print(logo_ok+logo_ng)

投稿日時:
最終更新: