无线网络

题目 无线网络

image-90a786c0

思路分析

找每头牛最近的两个基站

如果发现有一头牛距离两个基站的距离都大于mid(覆盖不到)

就说明mid取小了

代码实现

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'

typedef long long LL;
const int N=1e5+10;
int a[N],b[N];
int n,m;

bool check(int mid){
    for(int i=0,j=0;i<n;i++){
        while(j+1<m && b[j+1]<=a[i])    j++;
        if(abs(a[i]-b[j])>mid){
            if(j+1>=m || abs(b[j+1]-a[i])>mid)
                return false;
        }
    }
    return true;
}

int main()
{
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    cin>>n>>m;
    for(int i=0;i<n;i++)    cin>>a[i];
    for(int i=0;i<m;i++)    cin>>b[i];

    int l=0,r=2e9;
    while(l<r){
        int mid=(LL)l+r>>1;
        if(check(mid))  r=mid;
        else    l=mid+1;
    }
    cout<<r<<endl;
    return 0;
}

同类题型

视频讲解


⬅️ 匹配 🏠 00-刷题理模型 ➡️ 双指针相关模型