e-Log

e271828のブログだお

AtCoder ARC174 (2024-03-17 Sun)

ARC174 に参戦.問題Aのみ AC.

  • パフォーマンス:785
  • レーティング:52 (初)

問題A - A Multiply (300 点)

【問題ページ】 Difficulty: 467

問題の概要

長さ N の整数列 A と整数 C が与えられ,以下の操作を高々1回行うときの A の総和の最大値を求める.

  • 1 \leq l \leq r \leq N を満たす l, r を指定し,A_l, A_{l+1},\dots, A_r の全ての要素を C 倍する.

制約条件

  • 1 \leq N \leq 3 \times 10^{5}
  • -10^{6} \leq C \leq 10^{6}
  • -10^{6} \leq A_i \leq 10^{6}

解き方

区間和最大・最小,という頻出?テーマ.

C についての if 文の条件式で C = 0 の場合が漏れていて 1WA 出してしまった.イージーミス,もったいない.

以下,AC コード (Python).

n, c = map(int, input().split())
a = list(map(int, input().split()))
s = sum(a)
mss, x = 0, 0
if c <= 0:
  a = [-a[i] for i in range(n)]

for i in range(n):
  x += a[i]
  if x < 0:
    x = 0
  if x > mss:
    mss = x

if c <= 0:
  print(s + mss - mss * c)
else:
  print(s - mss + mss * c)

次回はもっと注意してコード提出しよう.


Best regards, e271828.