9-7unordered_map(基础) 完美配对1(数据增强版) (50 分)
给定一个长度为 n 的整数序列 a1 , a2 , … , an。我们称一个二元组(i,j)是完美配对的,当且仅当 i<j 并且 ai−aj=j−i.求完美配对的二元组数目(与原先不同的是ai的数据范围变大了).
数据范围
对于前 3 个测试点
1≤n≤1e3
对于后两个测试点
1≤n≤1e5
所有的测试点都满足
1≤a**i≤1e9
输入格式:
n
a1 a2 ... an
输出格式:
输出完美配对的二元组数目
输入样例:
5
3 2 5 2 6
输出样例:
仅有一对二元组(1, 2)满足条件, 因为 3 - 2 = 2 - 1.
1
代码:
#include <iostream>
#include <cmath>
#include <unordered_map>
using namespace std;
int main()
{
long long n;
cin >> n;
long long sum = 0;
unordered_map<long, long> a;
for (long long i = 0; i < n; i++)
{
long long v;
cin >> v;
a[v + i]++;
sum += (a[v + i] - 1);
}
cout << sum;
}
题目条件可转化为a[i]+i==a[j]+j;放入unordered_map,值++