C - T-shirts 解説 by kyopro_friends
事前にTシャツを購入しておくのではなく、当日着るものがなくなっていたときにTシャツを購入するとしてよいです。
また、無地のTシャツは食事の予定にしか使えないため、食事の予定には無地のTシャツを優先して着用するとしてよいです。
これらを踏まえて、洗濯済み/着用済みの無地の/ロゴ入りのTシャツの枚数を管理しながら愚直にシミュレーションすることで \(O(N)\) で問題を解くことができます。
_,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)
投稿日時:
最終更新: