我不用map也可以在32ms过
2025-05-06 11:09:20
发布于:北京
13阅读
0回复
0点赞
二分大师也!
看一下代码吧
#include<bits/stdc++.h>
#define input for(int i=0;i<n;i++)cin>>a[i]
#define paixu sort(a,a+n)
using namespace std;
long long n,c,a[int(2e5+10)],ans=0;
int erfen(long long num){//l到r的区间中有多少个num
    int l=0,r=n-1;
	int sum=0,mid;
	while(l<=r){
		mid=(l+r)/2;
		if(a[mid]==num){
			break;
		}else if(a[mid]>num){
			r=mid-1;
		}else{
			l=mid+1;
		}
	}//查找到mid(a[mid]是num)
    for(int i=mid;i>=0;i--){//排过序了,往前找,看看是不是num(有可能会有相同的数)
        if(a[i]!=num){
            break;
        }
        sum++;
    }
    for(int i=mid+1;i<n;i++){
        if(a[i]!=num){//往后找
            break;
        }
        sum++;
    }
	return sum;
}
int main(){
	cin>>n>>c;
	input;
	paixu;
	for(int i=0;i<n;i++){//a[i]为被减数
		ans+=erfen(a[i]-c);
	}
	cout<<ans;
	return 0;
}
测试点信息一览:
图片

最高仅需32ms
关注我,即可变帅
这里空空如也






有帮助,赞一个