• Educational Codeforces Round 15 Cellular Network


    Cellular Network

    题意:

    给n个城市,m个加油站,要让m个加油站都覆盖n个城市,求最小的加油范围r是多少。

    题解:

    枚举每个城市,二分查找最近的加油站,每次更新答案即可,注意二分的时候不要越界oil数组,上下界都不要越。还有,int坑死人,以后绝对全用long long!!!

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    
    typedef long long ll;
    const int INF=0x3f3f3f3f;
    const ll LINF=0x3f3f3f3f3f3f3f3f;
    #define PU puts("");
    #define PI(A) cout<<A<<endl
    #define SI(N) cin>>N
    #define SII(N,M) cin>>N>>M
    #define cle(a,val) memset(a,(val),sizeof(a))
    #define rep(i,b) for(int i=0;i<(b);i++)
    #define Rep(i,a,b) for(int i=(a);i<=(b);i++)
    #define reRep(i,a,b) for(int i=(a);i>=(b);i--)
    #define dbg(x) cout <<#x<<" = "<<x<<endl
    #define PIar(a,n) rep(i,n)cout<<a[i]<<" ";cout<<endl;
    #define PIarr(a,n,m) rep(aa,n){rep(bb, m)cout<<a[aa][bb]<<" ";cout<<endl;}
    const double EPS= 1e-9 ;
    
    /*  /////////////////////////     C o d i n g  S p a c e     /////////////////////////  */
    
    const int MAXN= 100000 + 9 ;
    
    ll city[MAXN],oil[MAXN];
    ll N,M;
    
    
    int main()
    {
        iostream::sync_with_stdio(false);
        cin.tie(0);
        cout.tie(0);
        while(SII(N,M))
        {
            rep(i,N)SI(city[i]);
            rep(i,M)SI(oil[i]);
            ll ans=0;
            rep(i,N)
            {
                ll t=lower_bound(oil,oil+M,city[i])-oil;
                ll d=LINF;
                if (t<M)
                d=abs(oil[t]-city[i]);
                ll d2=LINF;
                if (t-1>=0)
                d2=abs(oil[t-1]-city[i]);
                ans=max(ans,min(d,d2));
            }
            PI(ans);
        }
        return 0;
    }
  • 相关阅读:
    React Native组件左右两端展示(flex:1、justifyContent:'space-between')
    iOS 蓝牙开发详解(基本知识、相关类图、交互流程)
    iOS 蓝牙开发 Mac地址问题
    AFNetwork监听网络失效
    查看linux系统版本和cpu
    docker常用命令
    docker 常用命令--镜像删除
    docker部署nginx
    常见数据库会话查询脚本
    DB性能瓶颈分析思路
  • 原文地址:https://www.cnblogs.com/s1124yy/p/5720648.html
Copyright © 2020-2023  润新知