题目:
题目链接
题解:
把题目稍微变形一下就可以变成
a
a
a
i
i
i -
i
i
i =
a
a
a
j
j
j -
j
j
j
在输入的时候把数据处理为
a
a
a
i
i
i =
a
a
a
i
i
i -
i
i
i,然后计数这个数出现的次数
c
n
t
cnt
cnt,对于此时的
a
a
a
i
i
i而言,满足条件的次数为
c
n
t
cnt
cnt * (
c
n
t
cnt
cnt -
1
1
1) /
2
2
2,相加即为答案
#include <bits/stdc++.h>
using namespace std;
map<long long ,long long >q;
int main()
{
int t;
cin>>t;
while(t--)
{
long long n;
cin>>n;
q.clear();
for(int i=1;i<=n;i++)
{
long long a;
cin>>a;
q[a-i]++;
}
long long ans=0;
for(auto x:q)
{
ans+=(x.second)*(x.second-1)/2;
}
cout<<ans<<endl;
}
return 0;
}