不明白为啥不能一边读写一边做,下次不搞边读边做了
简单二分
把学校排列一下,然后找到每个人的成绩的位置,
第一个和最后一个特判一下,其他无所谓
#include <bits/stdc++.h>
using namespace std;
int n, m;
long long ans = 0;
long long s;
int a[100010];
int b[100010];
int main() {
cin >> m >> n;
for (int i = 1; i <= m; i++) {
cin >> a[i];
}
for (int i = 1; i <= n; i++) {
cin >> b[i];
}
sort(a + 1, a + 1 + m);
for (int i = 1; i <= n; i++) {
int left = 1;
int right = m;
int mid = 0;
if (b[i] > a[m]) {
ans += b[i] - a[m];
continue;
} else if (b[i] < a[1]) {
ans += a[1] - b[i];
continue;
}
while (left <= right) {
mid = (left + right) / 2;
if (a[mid] == b[i]) {
right = left = mid;
break;
}
if (a[mid] < b[i])
left = mid + 1;
if (a[mid] > b[i])
right = mid - 1;
}
ans += min(abs(a[left] - b[i]), abs(a[right] - b[i]));
}
cout << ans;
}
啦