E - This Message Will Self-Destruct in 5s
考え方
最悪の場合,$N=2\times 10^{5}$.- 全探索は$O(N^{2})$なのでできない.
- $A_{i} + A_{j}=X$で$X$を振るのは,$2\leq X \leq 2\times 10^{9}$だからできない.
そこで,条件を書き下してみると
\begin{aligned}
|i - j| = A_{i} + A_{j}
\end{aligned}
となり,$i,j$を含んだ式になる.|i - j| = A_{i} + A_{j}
\end{aligned}
このような場合,$i,j$を分離し,独立に計算するのが典型的なパターン.
絶対値を外すために$i > j$を満たすよう処理することにすれば,
\begin{aligned}
& i - j =A_{i} + A_{j} \\
&\Leftrightarrow A_{i} - i = - A_{j} - j
\end{aligned}
となる.& i - j =A_{i} + A_{j} \\
&\Leftrightarrow A_{i} - i = - A_{j} - j
\end{aligned}
よって,
- 第2式の右辺,左辺を独立に計算しておき
- $i > j$の範囲で右辺=左辺となる個数をカウントする
ここで,$i \leq j$のとき,第1式で右辺$\leq 0$,左辺$> 0$となることに気づけば,「$i > j$の範囲で」を気にする必要はなくなる.
別解
解説の解答がきれいだが,私はこういう上手い処理は思いつけない.Editorial - AtCoder Beginner Contest 166
(こっちを読んでからの方がわかりやすいかも:This Message Will Self-Destruct in 5s [AtCoder Beginner Contest 166 E] - はまやんはまやんはまやん)