给出一个序列\(A\),
求\(a_i+a_j=j-i(j>i)\)的个数
首先我们对式子进行一波处理
\(a_i+i=j-a_j\)
看到这个东西就很熟悉了
直接用map记忆化好了
#include<iostream>
#include<map>
using namespace std;
map<int,int> f;
int n;
int a[200005];
long long tot;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
f[i-a[i]]++;
}
for(int i=1;i<=n;i++)
{
tot+=f[i+a[i]];
}
cout<<tot;
return 0;
}
习题:This Message Will Self-Destruct in 5s (atcoder)(杂题)
原文:https://www.cnblogs.com/loney-s/p/12824410.html