2501: 【普及-】【P1678】烦恼的高考志愿

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:20 解决:9

题目描述

现有 lns="http://www.w3.org/1998/Math/MathML"> 所学校,每所学校预计分数线是 lns="http://www.w3.org/1998/Math/MathML">。有 lns="http://www.w3.org/1998/Math/MathML"> 位学生,估分分别为 lns="http://www.w3.org/1998/Math/MathML">

根据 lns="http://www.w3.org/1998/Math/MathML"> 位学生的估分情况,分别给每位学生推荐一所学校,要求学校的预计分数线和学生的估分相差最小(可高可低,毕竟是估分嘛),这个最小值为不满意度。求所有学生不满意度和的最小值。

输入

第一行读入两个整数 lns="http://www.w3.org/1998/Math/MathML">,lns="http://www.w3.org/1998/Math/MathML"> 表示学校数,lns="http://www.w3.org/1998/Math/MathML"> 表示学生数。

第二行共有 lns="http://www.w3.org/1998/Math/MathML"> 个数,表示 lns="http://www.w3.org/1998/Math/MathML"> 个学校的预计录取分数。第三行有 lns="http://www.w3.org/1998/Math/MathML"> 个数,表示 lns="http://www.w3.org/1998/Math/MathML"> 个学生的估分成绩。

输出

输出一行,为最小的不满度之和。

样例输入 复制

4 3
513 598 567 689
500 600 550

样例输出 复制

32

提示

数据范围:

对于 lns="http://www.w3.org/1998/Math/MathML">30% 的数据,lns="http://www.w3.org/1998/Math/MathML">1,1000,估分和录取线 lns="http://www.w3.org/1998/Math/MathML">10000

对于 lns="http://www.w3.org/1998/Math/MathML">100% 的数据,lns="http://www.w3.org/1998/Math/MathML">1,100000,估分和录取线 lns="http://www.w3.org/1998/Math/MathML">1000000 且均为正整数。


#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;
}