社区讨论
二分查找,只有60分,#2,#3,#9,#10没过,请求高手支援
P1678烦恼的高考志愿参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lo2thspm
- 此快照首次捕获于
- 2023/10/23 19:31 2 年前
- 此快照最后确认于
- 2023/10/23 19:31 2 年前
CPP
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
int m, n;
vector<int> school;
vector<int> student;
vector<int> my_index;
int check(int school_index, int student_index);
int binary_search(int x);
int main() {
cin >> m >> n;
for (int i = 1; i <= m; i++) {
int x;
cin >> x;
school.push_back(x);
}
for (int i = 1; i <= n; i++) {
int x;
cin >> x;
student.push_back(x);
}
sort(school.begin(), school.end());
sort(student.begin(), student.end());
for (int i = 0; i <= n - 1; i++) {
my_index.push_back(binary_search(i));
}
long long int ans = 0;
for (int i = 0; i <= n - 1; i++) {
if (i - 1 < 0) {
ans += school[my_index[i]] - student[i];
} else {
ans += min(school[my_index[i]] - student[i],
student[i] - school[my_index[i]-1]);
}
}
cout << ans;
return 0;
}
int binary_search(int x) {
int ans = 0;
int left = 0;
int right = m - 1;
while (left <= right) {
int mid = (left + right) >> 1;
if (check(mid, x)) {
ans = mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
return ans;
}
int check(int school_index, int student_index) {
if (student[student_index] <= school[school_index]) {
return 1;
} else {
return 0;
}
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...