1.题意
给你一个由n个整数组成的数组,计算下标对(i,j)使得i<j and aj−ai=j−i。
2.输出输入
案例数t 1<=t<=10^5
数组长度n 1<=n<=2*10^5
数组内容ai 1<=ai<=n
3.思路
将题目所给条件aj−ai=j−i 化成 aj-j=ai-i,即每次输入数组直接减去下标。
若数组中出现k个相同值 则有1+2+......+k-1种情况
再利用map计算 例如map<int ,int>a;
4.上板子
#include<iostream>
#include<map>
typedef long long ll;
using namespace std;
int main()
{
ll n, k;
int t;
cin >> t;
while (t--)
{
ll ans = 0;
map < ll , ll > a;
cin >> n;
for (ll i = 0; i < n; i++)
{
cin >> k;
k -= i;
ans += a[k];
a[k]++;
}
cout << ans << endl;
}
return 0;
}