QAQ_juruo @ 2024-02-22 22:55:28
标题为了吸引QAQ
#include<bits/stdc++.h>
using namespace std;
int a[int(1e5+5)],b[int(1e5+5)];
int main(){
long long ans=0,num,n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+n+1);
for(int i=1;i<=m;i++)
cin>>b[i];
int left,right,mid;
for(int i=1;i<=m;i++){
left=0,right=n+1;
while(left+1<right){
mid=(left+right)/2;
if(b[i]>=a[mid])
left=mid;
else
right=mid;
}
if(abs(b[i]-a[left])<abs(a[right]-b[i]))
num=abs(b[i]-a[left]);
else
num=abs(a[right]-b[i]);
ans+=num;
}
cout<<ans;
return 0;
}
by 迟暮天复明 @ 2024-02-22 23:01:56
建议二分这种东西去找一个稳定不会挂的确定的写法。
by QAQ_juruo @ 2024-02-23 09:00:57
@迟暮天复明 检查了一下,二分那段并没有什么问题,好像是少判特殊情况了。
by 迟暮天复明 @ 2024-02-23 10:44:13
@QAQ_juruo 这么厉害。
主要现在真的各种野生的奇奇怪怪的二分看多了(
by QAQ_juruo @ 2024-02-24 12:44:25
@迟暮天复明 还好我们老师没有讲什么开区间和闭区间()