题目大意:
给出一串数以及一个数字 \(C\),要求计算出所有 \(A−B=C\) 的数对的个数(不同位置的数字一样的数对算不同的数对)。
正文:
hash表练手题。将每一个数存进hash表里,再枚举每一个存进hash表里的数减 \(C\) 在hash表里的数目即可。
代码:
int n, c, hash[mod][2], a[N];
int h(int n)
{
return n % mod;
}
int l(int x)
{
int pos = h(abs(x));
int i = 0;
for (;hash[h(pos + i)][0] != x && hash[h(pos + i)][1]; i++);
return h(pos + i);
}
int main()
{
scanf ("%d%d", &n, &c);
for (int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
hash[l(a[i])][0] = a[i];
hash[l(a[i])][1] ++;
}
ll ans = 0ll;
for (int i = 1; i <= n; i++)
ans += hash[l(a[i] - c)][1] + 0ll;
printf("%lld", ans);
return 0;
}