求指教,58分,模拟几遍都找不出问题
  • 板块P1102 A-B 数对
  • 楼主hhhhaa
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/9/17 16:07
  • 上次更新2023/11/2 19:45:41
查看原帖
求指教,58分,模拟几遍都找不出问题
1081369
hhhhaa楼主2023/9/17 16:07
//双指针
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
const int N=2e5+10;
LL a[N];
LL ans=0;
int main(){
	int n;
	LL c;
	scanf("%d%lld",&n,&c);
	for(int i=0;i<n;i++)scanf("%lld",&a[i]);
	int A=1,B=0;
	sort(a,a+n);
	for(;B<n;){//A,B指针均只向前走
		while(a[A]-a[B]<c)A++;
		if(a[A]-a[B]==c){
			int i=1,j=1;//没有重复的数字就是ans++
			while(a[++B]==a[B-1])i++;//记录重复的数字,和上一位一样就多一种
			while(a[++A]==a[A-1])j++;
			ans+=i*j;
		}
		while(a[A]-a[B]>c)B++;	
	}
	printf("%lld\n",ans);
	return 0;
}  
2023/9/17 16:07
加载中...