bouzuya.hatenablog.com

ぼうずやのにっき

アルゴリズムと数学 演習問題集 074 - Sum of difference Easy を解いた

アルゴリズムと数学 演習問題集 074 - Sum of difference Easy を解いた。

問題: https://atcoder.jp/contests/math-and-algorithm/tasks/math_and_algorithm_bh

例題。愚直に二重ループしてしまうと O(N^2)N <= 2 * 10^5 という制約なので間に合わない。何かしらの工夫が必要になる。

試しに N = 4 A = {1, 2, 3, 4} として書き出してみる。

(2 - 1) +
(3 - 1) +
(4 - 1) +

(3 - 2) +
(4 - 2) +

(4 - 3)

外側のループ・内側のループでグループ化するのではなく出てくる数字に注目して整理する。 1 が足されるのは 0 回で引かれるのは 3 回。 21 回と 2 回。 32 回と 1 回。 43 回と 0 回。つまり A_i が足されるのは i - 1 回で引かれるのは N - i 回になる。 \sum_{i=1}^N (i-1)A_i-(N-i)A_i

これで 1..=N の一重のループにできるので O(N) となり間に合う。

提出: https://atcoder.jp/contests/math-and-algorithm/submissions/29937793


今日のコミット。