Título:
solução:
题目要求的数对需要满足:下标差=权值和,
设i<j,数对(i,j)满足条件,那么有:
j-i=a[i]+a[j],
j-a[j]=a[i]+i.
枚举j,判断有多少个a[i]+i=j-a[j]即可,可以用map维护a[i]+i的数量.
código:
#include<bits/stdc++.h>
#define int long long
#define PI pair<int,int>
using namespace std;
const int maxm=2e6+5;
int a[maxm];
int n;
void solve(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
map<int,int>mp;
int ans=0;
for(int i=1;i<=n;i++){
ans+=mp[i-a[i]];
mp[a[i]+i]++;
}
cout<<ans<<endl;
}
signed main(){
solve();
return 0;
}