AtCoder Regular Contest 036 B – 山のデータ をPython3で解く

Share

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

出典:
AtCoder Regular Contest 036 B – 山のデータ

この問題については、たぶん公式解説より分かりやすい解き方ではないかと思う。

# AtCoder Regular Contest 036 B - 山のデータ
# https://atcoder.jp/contests/arc036/tasks/arc036_b
# tag: 数列 考察

# 高さの等しい地点は存在しないので、
# 数列は必ず連続増加→連続減少を繰り返す形になる。
# (連続数は 1 以上とする)

# つまり、
# ...(増加, 減少), (増加, 減少), ....
# となっていると考えれば、数列全体を山が連続しているものと
# みなすことが出来る。

# 山の境界条件は、数列の両端と、減少→増加と転じているところ。

def main():
N = int(input())
field = [int(input()) for _ in range(N)]

result = 0

# N <= 2 ならそのまま返す。
if N <= 2:
print(N)
return

# 境界を確認していく。
# 左端
borders = [0]

# 減少→増加と転じている地点
for i in range(1, N-1):
if field[i-1] > field[i] < field[i+1]:
borders.append(i)

# 右端
borders.append(N-1)

# 求めた境界を元に、各山の幅を求めていく。
result = 0
for i in range(len(borders)-1):
width = borders[i+1] - borders[i] + 1
if result < width:
result = width

print(result)

main()
Share

コメントを残す

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