AtCoder Beginner Contest 133 D – Rain Flows into Dams をPython3で解く

Share

AtCoder上にある問題のうち、AtCoder Problemsでdiff 800以上と判定されているものを順番に解いていく企画。
基本的な考え方は全てコード中のコメントに入れてあるので、参照のこと。

出典:
AtCoder Beginner Contest 133 D – Rain Flows into Dams

なんかこう、中学の数学の問題とかに出てきそうな……考察重視の問題。これをコンテスト本番でぱっと思いつく?と訊かれると、正直自信がない。

# AtCoder Beginner Contest 133 D - Rain Flows into Dams
# https://atcoder.jp/contests/abc133/tasks/abc133_d
# tag: 循環 考察

# 仮に 5 個ずつの山とダムで考えてみる。

# 山: a b c d e (a)
# ダム: p q r s t (p)

# ここで、全体に降った雨の量は
# a + b + c + d + e = p + q + r + s + t
# また、(b + c) / 2 = q, (d + e) / 2 = s
# よって、a + 2q + 2s = p + q + r + s + t
# よって、a = p - q + r - s + t
# a が決まると、(a + b) / 2 = p より、
# b = 2p - a
# 以下略

def main():
N = int(input())
A = list(map(int, input().split()))

result = []

# 奇数番目の合計から偶数番目の合計を引いたものが、
# 山 1 に降った水の量となる
result.append(sum(A[::2]) - sum(A[1::2]))

# 以下考察に従って順番に山の降雨量を決めていく
for a in A[:-1]:
result.append(2 * a - result[-1])

print(*result)

main()
Share

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です