链接:
https://codeforc.es/problemset/problem/1520/D
题意:
给定数组a,获取满足aj−ai=j−i且i<j的对数
输入
4
6
3 5 1 4 6 6
3
1 2 3
4
1 3 3 4
6
1 6 3 4 5 6
输出量
1
3
3
10
解:
整理式子,ai-i=aj-j,所以提前对每个数字进行处理,存入book标记数组、
实际代码:
#include<iostream>
#include<cstring>
//#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
ll book[200005];
ll fbook[200005];
int main()
{
int T;
cin>>T;
for(int f=1;f<=T;f++)
{
memset(fbook,0,sizeof(fbook));
memset(book,0,sizeof(book));
ll ans=0;
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
ll temp;
cin>>temp;
temp-=i;
if(temp>=0)
{
book[temp]++;
if(book[temp]>1) ans+=(book[temp]-1);
}
else if(temp<0)
{
fbook[-temp]++;
if(fbook[-temp]>1) ans+=(fbook[-temp]-1);
}
}
cout<<ans<<endl;
}
}
限制:
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output