Codeforces Round #719 (Div. 3) D. Same Differences 动态map维护
Problem - D - Codeforces
题意:
思路:
这种题,一般跑一个指针,然后推式子用数据结构去维护另一个指针
推一推式子:ai-i=aj-j
那么只需维护前缀满足ai-i的哈希表就好了
Code:
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define db double
const int mxn=2e5+10;
map<int,int> mp;
int n,ans=0;
int a[mxn];
void solve(){
mp.clear();
ans=0;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++){
ans+=mp[a[i]-i];
mp[a[i]-i]++;
}
cout<<ans<<'\n';
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int __=1;cin>>__;
while(__--)solve();return 0;
}
还没有评论,来说两句吧...