#include <iostream> #include <algorithm> #include <cmath> using namespace std; const int MAX_M = 100000; const int MAX_N = 100000; // 二分查找最接近学生估分的学校分数线 int binarySearch(int schools[], int m, int score) { int left = 0, right = m - 1; while (left < right) { int mid = left + (right - left) / 2; if (schools[mid] < score) { left = mid + 1; } else { right = mid; } } // 找到最接近的分数线,考虑 left 为 0 和非 0 的情况 int minDiff; if (left > 0) { minDiff = min(abs(schools[left] - score), abs(schools[left - 1] - score)); } else { minDiff = abs(schools[left] - score); } return minDiff; } int main() { int m, n; // 读取学校数量 m 和学生数量 n cin >> m >> n; int schools[MAX_M]; // 读取 m 个学校的预计录取分数 for (int i = 0; i < m; i++) { cin >> schools[i]; } // 对学校分数线进行排序 sort(schools, schools + m); int students[MAX_N]; // 读取 n 个学生的估分成绩 for (int i = 0; i < n; i++) { cin >> students[i]; } long long totalDissatisfaction = 0; // 遍历每个学生的估分 for (int i = 0; i < n; i++) { // 调用二分查找函数找到最接近的分数线,计算不满意度 int minDiff = binarySearch(schools, m, students[i]); // 累加该学生的不满意度 totalDissatisfaction += minDiff; } // 输出最小的不满意度总和 cout << totalDissatisfaction << endl; return 0; } /************************************************************** Problem: 1899 User: chenjingqi Language: C++ Result: Accepted Time:135 ms Memory:2736 kb ****************************************************************/