C - Distance Indicators Editorial
by
kyopro_friends
\(j-i=A _ i+A _ j\) を変形して、\(j-A _ j=i+A _ i\) とします。
公式解説では \(i+A_i\) の登場回数を逐次更新していますが、あらかじめ \(i+A_i\) の値を列挙しておき、各 \(j-A_j\) がその中に何度登場するかを確かめれば十分です。
(全ての \(A_i\) が正であることから \(i=j\) が条件を満たすことはなく、\((i,j)\) が条件を満たすならば \((j,i)\) が条件を満たすこともないため)
実装例(Python)
from collections import Counter
N=int(input())
A=list(map(int,input().split()))
# Ai+i の度数分布の作成
Ai_plus_i = Counter(A[i]+i for i in range(N))
# j-Ajの登場回数の和を計算
print(sum(Ai_plus_i[j-A[j]] for j in range(N)))
posted:
last update: