【Luogu P1102】A-B 数对

题目大意:

给出一串数以及一个数字 \(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;
}
posted @ 2020-07-19 16:24  Jayun  阅读(194)  评论(0编辑  收藏  举报