ABC166E - This Message Will Self-Destruct in 5s

E - This Message Will Self-Destruct in 5s

考え方

最悪の場合,$N=2\times 10^{5}$.

  1. 全探索は$O(N^{2})$なのでできない.
  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$を分離し,独立に計算するのが典型的なパターン.

絶対値を外すために$i > j$を満たすよう処理することにすれば,

\begin{aligned}
& i - j =A_{i} + A_{j} \\
&\Leftrightarrow A_{i} - i = - A_{j} - j
\end{aligned}
となる.

よって,

  1. 第2式の右辺,左辺を独立に計算しておき
  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] - はまやんはまやんはまやん