我的想法是用二分
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int a[N],b[N],ans;
int main(){
int n,m;
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+n+1);
for(int i=1;i<=n;i++){
int l=1,r=n+1;
while(l<r){
int mid=(l+r)/2;
if(a[mid]>=b[i])r=mid;
else l=mid+1;
}
if(b[i]<=a[1])ans+=a[1]-b[i];
else ans+=min(abs(a[l]-b[i]),abs(a[l-1]-b[i]));
}
cout<<ans;
return 0;
}
可是……只过了一个点,不是很能理解……
大佬们帮帮忙,蟹蟹!