第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛 建立火车站(二分)

题目描述

新冠疫情,导致了各个城市之间物资输送的障碍。假设有N个城市在一条直线上,为了物资能顺利抵达各个城市,可以在路线上建立最多个数为K个暂时停靠站,由于火车在两个站台(城市也算站台)之间的距离越近,需要的总花费越少,因此我们需要让火车相邻两个站台之间的最大距离最小,求出距离L,2 ≤N ≤100000, 0 ≤K ≤100000,所有城市坐标小于等于10^12,且不存在负值。提醒: 城市坐标均为正整数,且停靠站只能建在整数坐标点上。

输入描述:

 
第一行输入城市个数N,可建立停靠站个数K, 第二行输入N个城市的坐标(不保证前一个城市坐标比后一个城市小)。

 第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛 	建立火车站(二分)

const int N=1e5+5;

    int n,m;
    int i,j,k;
    ll a[N];

bool C(ll aim)
{
    int cnt=k;
    for(int i=2;i<=n;i++){
        ll res=a[i]-a[i-1];
        int cur=res/aim;
        if(res%aim==0) cur--;
        cnt-=cur;
    }
    if(cnt>=0) return true;
    else return false;
}

int main()
{
    //IOS;
    while(~sdd(n,k)){
        for(int i=1;i<=n;i++) sll(a[i]);
        sort(a+1,a+1+n);
        ll l=0,r=a[n]-a[1]+10,ans=r;
        while(r>=l){
            ll mid=l+r>>1;
            if(C(mid)) r=mid-1,ans=mid;
            else l=mid+1;
        }
        pll(ans);
    }
    //PAUSE;
    return 0;
}

 

上一篇:大一寒假acm训练-小题目总结


下一篇:「ACM-ICPC 2018 南京站网络赛 A 题」An Olympian Math Problem