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
标签:le,int,ABC166E,Self,long,5s,include
From: https://www.cnblogs.com/StrayerTen/p/ABC166E.html