[ABC166E] This Message Will Self-Destruct in 5s

发布时间 2023-06-09 10:10:32作者: StrayerTen

This Message Will Self-Destruct in 5s の 传送门

Solution

首先看到

\(j-i=A_i+A_j\)

转换一下,\(i+a_i=j-a_j\)

接下来,对于每一个 \(i\)(\(1\le i\le n\)),用一个 map\(i - a_i\) 的数量。

最后枚举 \(i\)(\(1\le i\le n\)),每次将 \(ans\) 加上 \(i+a_i\)map 里的数量。

Code

//#include "pch.h"
#include <iostream>
#include <map>
using namespace std;
#define int long long//int -> long long
const int N = 2e5 + 5;
int n, ans, a[N];
map<int, int> mp;
signed main() {
	cin >> n;
	for (int i = 1; i <= n; ++i) {
		cin >> a[i];
		++mp[i - a[i]];
	}
	for (int i = 1; i <= n; ++i) { ans += mp[i + a[i]]; }
	cout << ans;
	return 0;
}
//i+ai=j-aj