hitoare日記

たまに書きます

E - This Message Will Self-Destruct in 5s (AtCoder Beginner Contest 166)

問題リンク

atcoder.jp


問題概要

\(N\)要素の数列\(A_i\)が与えられる。

これらのうち2つを選んで得られる\(N(N-1)/2\)個のペアのうち、iとjの差の絶対値が\(A_i + A_j\)に等しいものはいくつあるか。

解法

\(|i-j|=A_i+A_j\)を変形すると

\(i > j\)のとき\(i-j=A_i+A_j\)より\(A_i-i = A_j+j\)

\(j > i\)のとき\(j-i=A_i+A_j\)より\(j-A_j = A_i+i\)

となる。

よって前者の場合はmapでそれまでに\(A_i-i\)が(別のjに対する\(A_j+j\)として)登場した回数を答えに加え、\(A_i+i\)が登場した回数に1加える操作を繰り返すとよい。

後者の場合も同様。

提出

https://atcoder.jp/contests/abc166/submissions/12725826

感想

Dにびっくりして一旦こっちに向かったけど、すぐ思いついてよかった。