【AtCoder】ABC332解説(Python)

AtCoder Beginner Contest 332の解説記事です。

目次

ABC332 A – Online Shopping

問題

問題文の要約は以下の通りです。

問題の要約

\(P_i\) 円の商品を \(Q_i\) 個、全部で \(N\) 種類の商品を購入する。
また、合計金額が \(S\) 円以上でないときは \(K\) 円の送料がかかるとき、支払う合計金額を求めよ。

制約

・\(1 \le N \le 100\)
・\(1 \le S \le 10000\)
・\(1 \le K \le 10000\)
・\(1 \le P_i \le 10000\)
・\(1 \le Q_i \le 100\)
・入力はすべて整数

入力

\(N\) \(S\) \(K\)
\(P_1\) \(Q_1\)
\(P_2\) \(Q_2\)
\(\vdots\)
\(P_N\) \(Q_N\)

出力

支払う合計金額を出力せよ。

解説

N 個の商品の合計金額を順に求め、最後に送料が発生するかを判定する。

解説

まず入力 \(N\), \(S\), \(K\) をint型として受け取ります。

# 入力
N,S,K=map(int,input().split())

答えの変数ansを初期値を0で用意します。

# 答え(初期値:0)
ans=0

N 個の商品の合計金額を順に求めます。

# N 個の商品の合計金額を順に求める
for i in range(N):
  P,Q=map(int,input().split())
  ans+=P*Q

\(S\) 円未満であれば送料 \(K\) 円が発生する

# S 円未満であれば送料 K 円が発生する
if ans<S:
  ans+=K

最後に答えを出力します。

# 答えを出力
print(ans)

解答

# 入力
N,S,K=map(int,input().split())

# 答え(初期値:0)
ans=0

# N 個の商品の合計金額を順に求める
for i in range(N):
  P,Q=map(int,input().split())
  ans+=P*Q

# S 円未満であれば送料 K 円が発生する
if ans<S:
  ans+=K

# 答えを出力
print(ans)

ABC332 B – Glass and Mug

問題

解説

実際に操作を \(K\) 回行い、結果を出力する。

解答

# 入力
K,G,M=map(int,input().split())

# グラスの水量(初期値:0)
g=0
# マグカップの水量(初期値:0)
m=0

# 操作を K 回繰り返す
for i in range(K):
  # グラスが水で満たされているとき、グラスの水をすべて捨てる。
  if g==G:
    g=0
  # マグカップが空であるとき、マグカップを水で満たす。
  elif m==0:
    m=M
  # マグカップが空になるかグラスが水で満たされるまで、マグカップからグラスに水を移す。
  else:
    tmp=min(G-g,m)
    g+=tmp
    m-=tmp

# 出力
print(g,m)

ABC332 C – T-shirts

問題

解説

洗濯するまでに食事の予定と競技プログラミングのイベントが何日あるかを求め、必要なロゴ入りの T シャツの枚数を求める。

解答

# 入力
N,M=map(int,input().split())
S=input()

# 食事に行く予定(初期値:0)
food=0
# 競技プログラミングのイベントに行く予定(初期値:0)
event=0
# 答え(初期値:0)
ans=0

# 予定を順にみる
for w in S:
  # 必要なロゴ入りの T シャツの枚数を求める。
  if w=='0':
    ans=max(ans,event,food+event-M)
    food=0
    event=0
  # 食事に行く予定 +1
  elif w=='1':
    food+=1
  # 競技プログラミングのイベントに行く予定 +1
  else:
    event+=1

# 出力
print(max(ans,event,food+event-M))
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次