题目链接:烦恼的高考志愿
题目大意:给你m个学校录取分,然后再给你n个学生分,枚举n个学生分找出上面m个分里面与每个学生分差值最小的值,然后差值做贡献,算最后的贡献
题目思路:直接二分即可,找刚好大于等于它的第一个数和刚好小于等于它的第一个数,特判一下第一个学校录取分就大于当前分的情况
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll m,n,x,a[1000005];
int main(){
while(~scanf("%lld%lld",&m,&n)){
for(ll i = 0;i < m;i++)
scanf("%lld",&a[i]);
sort(a,a+m);
ll sum = 0;
int minn;
for(ll i = 0;i < n;i++){
scanf("%lld",&x);
if(a[lower_bound(a,a+m,x)-a] == a[0]) sum += abs(x-a[0]);
else sum += min(abs(x-a[lower_bound(a,a+m,x)-a]),abs(x-a[lower_bound(a,a+m,x)-a-1]));
}
printf("%lld\n",sum);
}
return 0;
}