洛谷题单指南-二分查找与二分答案-P3853 [TJOI2007] 路标设置

原题链接:https://www.luogu.com.cn/problem/P3853

题意解读:相邻路标的最大距离即空旷指数,空旷指数越小,用的路标越多,因此可以根据空旷指数将使用路标情况分成两类:路标数<=K,路标数>K,对空旷指数进行二分即可。

解题思路:

二分的判定条件为,

给定空旷指数,计算需要的路标数

只需遍历每两个相邻路标,如果距离>空旷指数,则在此区间增加的路标数为:距离/空旷指数,如果除不尽向下取整,如果能除尽还要减一

如果增加的路标数<=K,则满足要求,继续二分找更小的空旷指数,否则二分找更大的空旷指数。

100分代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 100005;

int a[N], L, n, k, ans;

bool check(int x)
{
    long long cnt = 0;
    for(int i = 2; i <= n; i++)
    {
        int dist = a[i] - a[i - 1];
        if(dist > x)
        {
            if(dist % x == 0) cnt += dist / x - 1; //能除尽增加的路标数
            else cnt += dist / x; //除不尽增加的路标数
        }
    }
    return cnt <= k;
}

int main()
{
    cin >> L >> n >> k;
    for(int i = 1; i <= n; i++) cin >> a[i];

    int l = 1, r = L;
    while(l <= r)
    {
        int mid = (l + r) >> 1;
        if(check(mid)) ans = mid, r = mid - 1;
        else l = mid + 1;
    }
    cout << ans;

    return 0;
}

 

posted @ 2024-03-01 15:39  五月江城  阅读(54)  评论(0编辑  收藏  举报