这第一个点哪错了??
记录。
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <bits/stdc++.h>
using namespace std;
int main() {
int m, n;
vector<long long> school;
cin >> m >> n;
for (int i = 0; i < m; ++i) {
long long x;
cin >> x;
school.push_back(x);
}
sort(school.begin(), school.end());
long long tot = 0;
for (int i = 0; i < n; ++i) {
long long x;
cin >> x;
// 使用二分查找来确定x在学校录取分数数组中的位置或插入位置
auto it = lower_bound(school.begin(), school.end(), x);
long long minDiff =100000000000000000; // 初始化最小差值为一个很大的值
// 如果x小于学校录取分数数组中的最小值,则最近的两个录取分数是最小值和最小值的前一个值
if (it == school.begin()) {
minDiff = min(minDiff, abs(*it - x));
if (it != school.end()) {
minDiff = min(minDiff, abs(*(it + 1) - x));
}
}
// 如果x大于学校录取分数数组中的最大值,则最近的两个录取分数是最大值和最大值的后一个值
else if (it == school.end()) {
minDiff = min(minDiff, abs(*prev(it) - x));
minDiff = min(minDiff, abs(*(prev(it) - 1) - x));
}
// 否则,最近的两个录取分数是当前位置和前一个位置的值
else {
minDiff = min(minDiff, abs(*it - x));
minDiff = min(minDiff, abs(*prev(it) - x));
}
tot += minDiff; // 累加最小差值到总和上
}
cout << tot << endl; // 输出总和
return 0;
}
求调玄关!!!