题目描述
现有 m 所学校,每所学校预计分数线是 ai。有 n 位学生,估分分别为 bi。
根据n位学生的估分情况,分别给每位学生推荐一所学校,要求学校的预计分数线和学生的估分相差最小(可高可低,毕竟是估分嘛),这个最小值为不满意度。求所有学生不满意度和的最小值。
输入描述
第一行读入两个整数 m,n。m表示学校数,n表示学生数。
第二行共有m个数,表示m个学校的预计录取分数。
第三行有n个数,表示n个学生的估分成绩。
输出描述
输出一行,为最小的不满度之和。
样例输入
4 3 513 598 567 689 500 600 550
样例输出
32
提示
对于100%的数据,1≤n,m≤100000,估分和录取线≤1000000 且均为正整数。
#include <bits/stdc++.h>
using namespace std;
int a[100010],b[100010];
int main()
{
int m,n;
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+1+m);
long long ans=0;
for(int i=1;i<=n;i++)
{
int l=0,r=m+1;
while(l<r)
{
int mid=(l+r)/2;
if(a[mid]<=b[i])
l=mid+1;
else
r=mid;
}
if(l==1) ans+=abs(a[1]-b[i]);
else
ans+=min(abs(a[l]-b[i]),abs(a[l-1]-b[i]));
}
cout<<ans;
return 0;
}