#include <iostream> #include <algorithm> #include <vector> #include <climits> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int m, n; cin >> m >> n; vector<int> schools(m); vector<int> students(n); // 读取学校分数线 for (int i = 0; i < m; ++i) { cin >> schools[i]; } // 读取学生估分 for (int i = 0; i < n; ++i) { cin >> students[i]; } // 对学校分数线排序以便二分查找 sort(schools.begin(), schools.end()); long long total_dissatisfaction = 0; for (int student_score : students) { // 使用lower_bound找到第一个不小于学生分数的学校 auto it = lower_bound(schools.begin(), schools.end(), student_score); int min_diff = INT_MAX; // 检查找到的学校 if (it != schools.end()) { min_diff = abs(*it - student_score); } // 检查前一个学校(如果存在) if (it != schools.begin()) { min_diff = min(min_diff, abs(*(it - 1) - student_score)); } total_dissatisfaction += min_diff; } cout << total_dissatisfaction << endl; return 0; } /************************************************************** Problem: 1899 User: zhengzihao Language: C++ Result: Accepted Time:95 ms Memory:3016 kb ****************************************************************/