无语
  • 板块灌水区
  • 楼主Submerge_TA
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/7/24 22:24
  • 上次更新2023/11/3 07:49:21
查看原帖
无语
724600
Submerge_TA楼主2023/7/24 22:24

这第一个点哪错了??

记录。

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <bits/stdc++.h>
using namespace std;

int main() {
    int m, n;
    vector<long long> school;

    cin >> m >> n;

    for (int i = 0; i < m; ++i) {
        long long x;
        cin >> x;
        school.push_back(x);
    }

    sort(school.begin(), school.end());

    long long tot = 0;
    for (int i = 0; i < n; ++i) {
        long long x;
        cin >> x;

        // 使用二分查找来确定x在学校录取分数数组中的位置或插入位置
        auto it = lower_bound(school.begin(), school.end(), x);

        long long minDiff =100000000000000000; // 初始化最小差值为一个很大的值

        // 如果x小于学校录取分数数组中的最小值,则最近的两个录取分数是最小值和最小值的前一个值
        if (it == school.begin()) {
            minDiff = min(minDiff, abs(*it - x));
            if (it != school.end()) {
                minDiff = min(minDiff, abs(*(it + 1) - x));
            }
        } 
        // 如果x大于学校录取分数数组中的最大值,则最近的两个录取分数是最大值和最大值的后一个值
        else if (it == school.end()) {
            minDiff = min(minDiff, abs(*prev(it) - x));
            minDiff = min(minDiff, abs(*(prev(it) - 1) - x));
        }
        // 否则,最近的两个录取分数是当前位置和前一个位置的值
        else {
            minDiff = min(minDiff, abs(*it - x));
            minDiff = min(minDiff, abs(*prev(it) - x));
        }

        tot += minDiff; // 累加最小差值到总和上
    }

    cout << tot << endl; // 输出总和

    return 0;
}

求调玄关!!!

2023/7/24 22:24
加载中...