对于本题来说要求
A
−
B
=
C
A-B=C
A−B=C,移项后发现
A
−
C
=
B
A-C=B
A−C=B我们只需要求
A
−
C
A-C
A−C后的值有多少个即可
开结构体来实现
v
a
l
val
val表示当前位置的值,
n
u
m
num
num表示当前数字出现几次
code
#include<bits/stdc++.h>usingnamespace std;constint maxn =1000003;typedeflonglong LL;template<typename T>inlinevoidread(T &s){
s =0;
T w =1, ch =getchar();while(!isdigit(ch)){if(ch =='-') w =-1; ch =getchar();}while(isdigit(ch)){ s =(s <<1)+(s <<3)+(ch ^48); ch =getchar();}
s *= w;}
LL ans;int n, c;int a[maxn];struct node { LL val;int num;} h[maxn];constint mod =1000003;inlineintha(LL x){return x % mod;}inlineintfind(LL x){int y =ha(abs(x));while(h[y].val && h[y].val != x)ha(++y);return y;}inlinevoidinsert(LL x){int y =find(x);
h[y].num++;
h[y].val = x;}intmain(){read(n),read(c);for(int i =1; i <= n;++i)read(a[i]),insert(a[i]);for(int i =1; i <= n;++i)
ans += h[find(a[i]- c)].num;printf("%lld\n", ans);return0;}