第三个点错了有大佬帮忙看一下为什么吗
查看原帖
第三个点错了有大佬帮忙看一下为什么吗
228683
小白坑啊楼主2021/1/31 22:38

我自己测试的输出和洛谷的输出是一样的

#include<iostream>
#include<algorithm>
using namespace std;



int find(int aim,int a[],int n){
	int l=0,r=n-1;
	int mid,jud=0;
	int ans=0;
	while(l<r){
		mid=(l+r)/2;
		if(a[mid]==aim){
			ans++;
			jud=1;
			break;
		}
		else if(a[mid]>aim){
			r=mid;
		}
		else{
			l=mid+1;
		}
	}
	if(jud==1){
		int j=mid;
		while(a[j+1]==aim){
			ans++;
			j++;
		}
		j=mid;
		while(a[j-1]==aim){
			ans++;
			j--;
		}
	}
	return ans;
}

int main(){
	int n,c;
	long long ans=0; 
	cin>>n>>c;
	int a[200005];
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	sort(a,a+n);
	for(int i=0;i<n;i++){
		int aim=a[i]-c;
		int now=find(aim,a,n);
		ans+=now;
		while(a[i+1]==a[i]){
			ans+=now;
			i++;
		}
	}
	cout<<ans;
    return 0;
}

2021/1/31 22:38
加载中...