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(码长)
就很秀