"简单"的题解
查看原帖
"简单"的题解
1327557
jjkim楼主2025/8/3 10:12

无需多言,直接走起


#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;

bool isCovered(const vector<int>& cities, const vector<int>& towers, long long r) {
    int m = towers.size();
    for (int city : cities) {
        auto it = lower_bound(towers.begin(), towers.end(), city);
        bool covered = false;
        if (it != towers.end() && *it - city <= r) covered = true;
        if (it != towers.begin() && city - *prev(it) <= r) covered = true;
        if (!covered) return false;
    }
    return true;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int n, m;
    cin >> n >> m;
    
    vector<int> cities(n), towers(m);
    for (int i = 0; i < n; ++i) cin >> cities[i];
    for (int i = 0; i < m; ++i) cin >> towers[i];
    
    sort(cities.begin(), cities.end());
    sort(towers.begin(), towers.end());
    
    long long left = 0, right = max(
        abs(cities.back() - towers.front()),
        abs(towers.back() - cities.front())
    );
    long long ans = right;
    
    while (left <= right) {
        long long mid = left + (right - left) / 2;
        if (isCovered(cities, towers, mid)) {
            ans = mid;
            right = mid - 1;
        } else {
            left = mid + 1;
        }
    }
    
    cout << ans << endl;
    return 0;
}

全AC,记录记录

2025/8/3 10:12
加载中...