70 分 求助~
查看原帖
70 分 求助~
579182
DarPluto_9楼主2022/6/8 16:51
#include <iostream>
using namespace std;
#include <algorithm>
typedef long long ll;
const int N = 1e5 + 10;
int sch[N], stu[N];

int main()
{
	int m, n;
	ll sum = 0;
	cin >> m >> n;
	for (int i = 0; i < m; i++)
		scanf("%d",&sch[i]);

	sort(sch, sch + m);   //排序

	for (int i = 0; i < n; i++)
	{
		scanf("%d", &stu[i]);

		int ex = lower_bound(sch, sch + m, stu[i]) - sch;  //找到>=val的最左位置
		if (ex == n)  //比所有的都大
			ex = n - 1;
		else if (ex == 0)   //防止后续ex-1
			ex = 0;
		else    //有可能小的更符合
			ex = abs(stu[i] - sch[ex]) > abs(stu[i] - sch[ex - 1]) ? ex - 1 : ex;

		sum += abs(stu[i] - sch[ex]);
	}
	cout << sum;
	return 0;
}
2022/6/8 16:51
加载中...