2501: 【作】【普及-】【P1678】烦恼的高考志愿
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:20
解决:9
题目描述
现有 所学校,每所学校预计分数线是 。有 位学生,估分分别为 。
根据 位学生的估分情况,分别给每位学生推荐一所学校,要求学校的预计分数线和学生的估分相差最小(可高可低,毕竟是估分嘛),这个最小值为不满意度。求所有学生不满意度和的最小值。
输入
第一行读入两个整数 。 表示学校数, 表示学生数。
第二行共有 个数,表示 个学校的预计录取分数。第三行有 个数,表示 个学生的估分成绩。
输出
输出一行,为最小的不满度之和。
样例输入 复制
4 3
513 598 567 689
500 600 550
样例输出 复制
32
提示
数据范围:
对于 的数据,,估分和录取线 ;
对于 的数据,,估分和录取线 且均为正整数。
#include<bits/stdc++.h>
using namespace std;
int n,a[100005],m,t;
long long ans=0;
int find(int x) {
if (x<=a[1]) return a[1]-x;
else if (x>=a[n]) return x-a[n];
int l=1,r=n+1;
while (l<=r) {
int mid=l+(r-l)/2;
if (a[mid]==x) return 0;
else if (a[mid]>x) r=mid-1;
else l=mid+1;
}
return min(abs(a[l]-x),abs(a[r]-x));
}
int main(){
scanf("%d %d",&n,&m);
for (int i=1;i<=n;i++) {
scanf("%d",&a[i]);
}
sort(a+1,a+n+1);
for (int i=1;i<=m;i++) {
scanf("%d",&t);
ans+=find(t);
}
printf("%ld",ans);
return 0;
}