codeforces 702C Cellular Network 二分

来源:互联网 发布:软件代理 编辑:程序博客网 时间:2024/05/01 16:57

题意:n个城市,m个蜂窝网络。他们的坐标在一条直线上。且给定的坐标都是从左到右依次给出。问网络的覆盖范围r至少为多大时,能将所有城市包含进去

思路:如果r可以,那么r+1,r+2...都可以。在给定的范围二分,判断每个r是否满足条件。

#include<cstdio>#include<set>#include<map>#include<stack>#include<string>#include<cstring>#include<iostream>#include<algorithm>#define ll long longusing namespace std;const int maxn =1e5;int a[maxn],b[maxn];int n,m;bool check(int r){int cur=0;for(int i=0;i<m;i++){ll left=b[i]-r;ll right=b[i]+r;while(cur<n&&a[cur]>=left&&a[cur]<=right)cur++;}if(cur==n)return true;return false;}int main(){while(~scanf("%d%d",&n,&m)){for(int i=0;i<n;i++)scanf("%d",&a[i]);for(int i=0;i<m;i++)scanf("%d",&b[i]);ll l=0,r=(int)2*1e9;while(l<r){ll mid=(l+r)/2; if(check(mid))//找最小值 {r=mid;}else{l=mid+1;}}printf("%d\n",l);}}

阅读全文
0 0
原创粉丝点击