#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int line[100005];
int main()
{
	int m,n;
	cin>>m>>n;
	int t=0,k=0;
	while(t<m)
	{
		cin>>line[t];
		t++;
	}
	sort(line,line+t);//以上是读入和排序分数线
	int sum=0;
	while(k<n)
	{
		int num;
		cin>>num;
		k++;
		int L=0,R=t-1;
		int ans=1000;//最小的差的绝对值,初始化为一个比较大的值
		while(L<=R)//终止条件
		{
			int mid=(L+R)/2;//取中间值判断
			if(line[mid]==num)
			{
				ans=0;
				break;//零必然为最小的所求解,所以可直接终止二分,节约时间
			}
			else if(line[mid]<num)
			{
				ans=min(ans,abs(line[mid]-num));
				L=mid+1;//可能的更好的答案在右边,右移,记录当前最优解,继续搜索
			}
			else if(line[mid]>num)
			{
				ans=min(ans,abs(line[mid]-num));
				R=mid-1;//可能的更好的答案在左边,左移,记录当前最优解,继续搜索
			}
		}
		sum+=ans;
	}
	cout<<sum;
}
//可以运行,但是不可以通过

0 条评论

目前还没有评论...

信息

ID
5736
时间
1000ms
内存
256MiB
难度
2
标签
递交数
98
已通过
22
上传者