AtCoder Beginner Contest 166 E.This Message Will Self-Destruct in 5s
题目链接
思维题,题意是找一对
(
i
,
j
)
(i,j)
(i,j) 使得
a
i
+
a
j
=
j
−
i
a_i+a_j=j-i
ai+aj=j−i,我们不妨设
i
<
j
i<j
i<j,移项得:
a
j
−
j
=
−
a
i
−
i
a_j-j=-a_i-i
aj−j=−ai−i,很容易想到用
m
a
p
map
map 存数,每次更新答案即可,AC代码如下:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
main()
{
int n;
cin>>n;
int a[n+1];
map<int,int>m;
ll ans=0;
for(int i=1;i<=n;i++){
cin>>a[i];
ans+=m[a[i]-i];
m[-a[i]-i]++;
}
cout<<ans;
return 0;
}