社区讨论

三分法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 条回复,欢迎继续交流。

正在加载回复...