求问超时怎么办
查看原帖
求问超时怎么办
405851
peaceandlove2002楼主2021/9/11 10:39
#include <stdio.h>
#include <stdlib.h>
int cmpfunc (const void * a, const void * b)
{
   return ( *(int*)a - *(int*)b );
}
int main()
{
	int n,c,i;
	scanf("%d %d",&n,&c);
	long long a[n+5];
	for(i=0;i<n;i++){
		scanf("%lld",&a[i]);
	}
	int left,right;
	int mid,s=0,j,t,temp;
	qsort(a,n,sizeof(long long int),cmpfunc);
	for(i=0;i<n;i++){
		int r=a[i]+c;
		left=i+1;right=n-1;
		while(left<right) {
			mid=(right-left)/2+left;
			if(a[mid]<r) left=mid+1;
			if(a[mid]>r) right=mid-1;
			if(a[mid]==r) {
				s++;
				for(j=mid-1;j>i;j--){
				if(a[j]==a[mid]) s++;
				else break;
				}
				for(j=mid+1;j<n;j++){
					if(a[j]==a[mid]) s++;
					else break;
				}
				break;
			}
		    
		}
		if(left==right) {
			if((a[left]-a[i])==c) s++;
		}
		
	}
	printf("%d",s);
}
2021/9/11 10:39
加载中...