社区讨论
三分法40分求助
P1678烦恼的高考志愿参与者 3已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @lo2dds8n
- 此快照首次捕获于
- 2023/10/23 12:00 2 年前
- 此快照最后确认于
- 2023/11/03 12:08 2 年前
CPP
#include <algorithm>
#include <bits/stdc++.h>
#include <cstdlib>
#include <iostream>
#include <memory>
#include <ostream>
using namespace std;
int m, n;
const int MAX_M = 100005;
const int MAX_N = 100005;
int M[MAX_M], N[MAX_N];
int search(int l, int r, int x) {
while (true) {
// cout<<"l:"<<l<<' '<<"r:"<<r<<endl;
if (r - l <= 2) {
int res = 20000000;
for (int i = l; i <= r; i++) {
if (res > abs(M[i] - x))
res = abs(M[i] - x);
}
return res;
}
int lmid = l + (r - l) / 3;
int rmid = r - (r - l) / 3;
if (abs(M[lmid] - x) <= abs(M[rmid] - x)) {
r = rmid;
} else {
l = lmid;
}
}
}
int main() {
cin >> m >> n;
for (int i = 0; i < m; i++) {
cin >> M[i];
}
// cout<<"m finished"<<endl;
for (int i = 0; i < n; i++) {
cin >> N[i];
}
// cout<<"N finished"<<endl;
sort(M, M + m);
// cout<<"sort finished"<<endl;
// for (int i = 0; i<m; i++) {
// cout<<M[i]<<endl;
//}
long long sum = 0;
for (int i = 0; i < n; i++) {
sum += search(0, m - 1, N[i]);
// cout<<"running"<<i<<endl;
}
cout << sum;
return 0;
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...