一种非正解写法,不知道还能不能改进
查看原帖
一种非正解写法,不知道还能不能改进
231543
bloodstalk楼主2022/4/14 14:28
#include<bits/stdc++.h>
using namespace std;
const int N=200005;

int a[N];
int n,c;
struct hh
{
	int zheng;
	int fu;
	int vis;
	
}tong[150000000];
long long ans;


int main()
{
	scanf("%d%d",&n,&c);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		if(a[i]>=0) tong[a[i]].zheng++;
		else tong[-a[i]].fu++;
	}	
	sort(a+1,a+n+1);
	for(int i=1;i<=n;i++)
	{
		if(a[i]>=0 && a[i]-c>=0 && !tong[a[i]].vis) ans=ans+tong[a[i]].zheng*tong[a[i]-c].zheng,tong[a[i]].vis=1;
		else if(a[i]>=0 && a[i]-c<0 && !tong[a[i]].vis) ans=ans+tong[a[i]].zheng*tong[a[i]-c].fu,tong[a[i]].vis=1;
		else if(a[i]<0 && a[i]-c<0 && !tong[a[i]].vis) ans=ans+tong[a[i]].fu*tong[a[i]-c].fu,tong[a[i]].vis=1;
	}
	printf("%lld",ans);
}/*10 3
10 4 7 5 10 4 5 8 5 7*/

我的思路就是用桶把那些数存起来并用结构体把负的数存进去,然后再做,但是数的规模太大了,桶存不进去,导致RE了一个点,和WA了两个点,我想请问还有优化的空间吗
2022/4/14 14:28
加载中...