Wshicaiji @ 2023-12-16 00:19:43
#include <bits/stdc++.h>
using namespace std;
const int N=1e7+99;
int m,n,sum;
int a[N],b[N];
int check(int x)
{
int l=1,r=m,mid,sum=0;
while(l<r)
{
mid=(l+r)/2;
if(a[mid]>=x) r=mid;
else l=mid+1;
}
return min(abs(a[r]-x),abs(x-a[r-1]));
}
int main()
{
cin>>m>>n;
for(int i=1;i<=m;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
cin>>b[i];
sort(a+1,a+m+1);
for(int i=1;i<=n;i++)
sum+=check(b[i]);
cout<<sum;
}
by jiangyouning @ 2023-12-21 16:02:06
@Wshicaiji 二分后面加个
if(a[i]<=b[1]) sum=sum+b[1]-a[i];
else sum=sum+min(abs(b[r]-a[i]),abs(b[r-1]-a[i]));
by holmeboo @ 2023-12-24 14:54:20
二分之前考虑特殊情况:
如果分数低于最低的录取线 无需搜 直接返回a[1]-x;
同样的道理分数高于最高的录取线 无需搜 直接返回x-a[m];