链接:
https://codeforces.com/problemset/problem/1520/D
题意
给你一个长度为n的数组,请你找出满足条件的(i,j)的对数,条件是aj - ai = j - i。
1 ≤ n ≤ 2e5
1 ≤ ai ≤ n
Example
input
4
6
3 5 1 4 6 6
3
1 2 3
4
1 3 3 4
6
1 6 3 4 5 6
output
1
3
3
10
解析
条件是aj - ai = j - i,即aj - j = ai - i,所以第一步将数组里面的每个值减去它的下标得到一个新的数组;那么其中相等的数字即成为一对满足条件的组合。
#include <iostream>
#include <map>
using namespace std;
typedef long long ll;
int main()
{
int _;
cin >> _;
while (_--)
{
map<int, int> a;
int n;
cin >> n;
ll ans = 0;
for (int i = 0; i < n; i++)
{
int x;
cin >> x;
ans += a[x - i];
a[x - i]++;
}
cout << ans << endl;
}
return 0;
}