考えて競プロする

プログラミングコンテストの問題をどう考えて解いたかを記録していくブログです。使用言語はPython3

ABC140-B - Buffet を解く

ABC140-B - Buffet

 

問題文を理解するのが難しい… サンプルにも説明があるので参考にしよう

i 番目の料理を食べると満足度 Bi を得ることができるのだが

i 番目の料理、i + 1 番目の料理、の順で食べた場合は追加で満足度 Ci も得ることが

できるという問題

 

2 番目の料理を食べて、次に 3 番目の料理を食べて…

のように、食べた料理の数字が連続している場合に追加で満足度を足す

(上記の場合は C2 を足す)ということを忘れないように実装する

 

以上を踏まえて書いたコードを以下に示す

 

提出したコード

# 入力
n=int(input())
A=list(map(int,input().split()))
B=list(map(int,input().split()))
C=list(map(int,input().split()))

# 答えを入れる変数
ans=0

# 連続している場合をチェックするために直前の値を持つ必要がある
# 負の値にしておけば被らない
# 100000000000000000000のようなとても大きな値にしてもいい
before=-1

# 順番に見ていく
for a in A:
  # 満足度を足す(0-indexなので-1するのに注意!)
  ans+=B[a-1]

  # 連続しているかチェック
  if before+1==a:
    ans+=C[before-1]

  # 次の「直前の値」として今見た値をAiを保存
  before=a

# 出力
print(ans)

 

提出結果はACでした