SSL_2378&&P1102【A-B数对】

A-B数对

题目

A-B数对


解析

统计数字的基础上改一下,哈希就完成了
唯一注意事项:累加要开longlong
最下面有惊喜

code:

#include<cstdio>
#include<algorithm>
#define mod 1000007
using namespace std;
int n,m,c,a[mod],s[mod],b[200010],t;
long long total=0;
int h(int x)
{
    
    
	return (x%mod+mod)%mod;
}
int wh(int x)
{
    
    
	int q=h(x),i=0;
	while(i<mod&&a[(q+i)%mod]!=x&&a[(q+i)%mod])i++;
	return (q+i)%mod;
}
bool cmp(int x,int y){
    
    return x>y;}
int main()
{
    
    
	scanf("%d%d",&n,&c);
	for(int i=1;i<=n;i++)
	{
    
    
		scanf("%d",&b[i]);
		t=wh(b[i]);
		s[t]++,a[t]=b[i];
	}
	sort(b+1,b+n+1,cmp);
	for(int i=1;i<=n;i++)
	{
    
    
		t=wh(b[i]-c);
		total+=s[t];
	}
	printf("%lld",total);
	return 0;
}

在SSLOJ上,这题有接近三页的AC提交,最劣解0MS/-868KB/0.94K(码长)
就很秀

猜你喜欢

转载自blog.csdn.net/zhanglili1597895/article/details/112972370
A-B