我不用map也可以在32ms过
2025-05-06 11:09:20
发布于:北京
7阅读
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
关注我,即可变帅
这里空空如也
有帮助,赞一个