第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛——L题 建立火车站

题目描述

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

输入描述:

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

输出描述

输出L

示例

输入
2 2
4 106
输出
34

AC的C++代码

#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
const int N = 100010;
int n, k;
ll a[N];
int solve(ll x) {
    int res = 0;
    for(int i = 1; i < n; ++i) {
        res += (a[i]-a[i-1]-1)/x;
    }
    return res > k;
}
int main() {
    cin >> n >> k;
    for(int i = 0; i < n; ++i) 
		cin >> a[i];
    sort(a, a+n);
    ll l = 1, r = 1e12, mid;
    while(l <= r) {
        mid = (l+r)>>1;
        if(solve(mid)) 
			l = mid+1;
        else r = mid-1;
    }
    cout<<l<<endl;
    return 0;
}
上一篇:第十一届蓝桥杯单片机总结


下一篇:超喜欢的歌