ABC166 E his Message Will Self-Destruct in 5s

ABC166 E his Message Will Self-Destruct in 5s

問題概要

整数[$ N]
ある整数列[$ A]が与えられる

 abs(j-i) = A_{i}+A_{j}となる i,j (i < j)を求める

考察

  • 式変形すると見えてくる
  • 見えてしまえばあとは実装するだけの状態に落とし込める

ソースコード

#include<algorithm>
#include<bitset>
#include<cassert>
#include<cfloat>
#include<climits>
#include<cmath>
#include<deque>
#include<functional>
#include<iomanip>
#include<iostream>
#include<map>
#include<queue>
#include<array>
#include<set>
#include<stack>
#include<string>
#include<unordered_map>
#include<unordered_set>
#include<utility>
#include<vector>

using namespace std;


const int INF = 1e9 + 7;
constexpr ll MOD = 1e9 + 7;


/***********************************************************************************/


int main() {

	cin.tie(0);
	ios::sync_with_stdio(false);
	cout << fixed << setprecision(10);

	ll N;
	cin >> N;
	vector<ll> A(N);
	map<ll,ll> L,R;
	for(int i = 0;i < N;i++){
		cin >> A[i];
		L[i+A[i]]++;
		R[i-A[i]]++;
	}
	ll ans = 0;

	for(auto itr:L){
		ans += itr.second*R[itr.first];
	}
	cout << ans << endl;
	
	return 0;
}